在 django admin 中创建对象时如何自动插入当前用户?

新手上路,请多包涵

我有一个文章数据库

submitter = models.ForeignKey(User, editable=False)

其中 User 导入如下:

 from django.contrib.auth.models import User.

当特定用户提交文章时,我想自动将当前活动用户插入提交者字段。

有人有什么建议吗?

原文由 FurtiveFelon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 882
2 个回答

以防万一有人在寻找答案,这是我在这里找到的解决方案:http: //demongin.org/blog/806/

总结一下:他有一个 Essay 表,如下所示:

 from django.contrib.auth.models import User

class Essay(models.Model):
    title = models.CharField(max_length=666)
    body = models.TextField()
    author = models.ForeignKey(User, null=True, blank=True)

其中multiuser可以创建论文,所以他创建了一个admin.ModelAdmin类,如下:

 from myapplication.essay.models import Essay
from django.contrib import admin

class EssayAdmin(admin.ModelAdmin):
    list_display = ('title', 'author')
    fieldsets = [
        (None, { 'fields': [('title','body')] } ),
    ]

    def save_model(self, request, obj, form, change):
        if getattr(obj, 'author', None) is None:
            obj.author = request.user
        obj.save()

原文由 FurtiveFelon 发布,翻译遵循 CC BY-SA 2.5 许可协议

假设用户 B 保存了用户 A 创建的记录。通过使用上述方法,记录将与用户 B 一起保存。在某些情况下,这可能不是最佳选择,因为保存该记录的每个用户都将“窃取”它。有一个解决方法,它只会保存用户一次(创建它的人):

模型.py

 from django.contrib.auth.models import User

class Car(models.Model):
    created_by = models.ForeignKey(User,editable=False,null=True,blank=True)
    car_name = models.CharField(max_length=40)

管理员.py

 from . models import *

class CarAdmin(admin.ModelAdmin):
    list_display = ('car_name','created_by')
    actions = None

    def save_model(self, request, obj, form, change):
        if not obj.created_by:
            obj.created_by = request.user
        obj.save()

原文由 Lourenzo Costa 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题