--转载自:林肯李
该文章写的很好,特转载留待后期备用
背景
在开发 CMS 时,经常需要标记谁创建了记录。Django 为我们提供了一个很好的管理界面。但是当我们只使用默认值时,用户需要自己选择他们是谁。我们想为他们自动选择,他们不能假装是其他人。
代码
在 django models.py 中,我们有以下内容:
# 模型.py class Notes(models.Model): title = models.CharField(max_length=255) content = models.TextField() date = models.DateField() created_by = models.ForeignKey(User, related_name="Created By")
我们希望为登录用户自动设置 created_by。
所以在我们的管理员中:
# admin.py class NotesAdmin(admin.ModelAdmin): def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == 'created_by': kwargs['queryset'] = User.objects.filter(username=request.user.username) return super(NotesAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) def get_readonly_fields(self, request, obj=None): if obj is not None: return self.readonly_fields + ('created_by',) return self.readonly_fields def add_view(self, request, form_url="", extra_context=None): data = request.GET.copy() data['created_by'] = request.user request.GET = data return super(NotesAdmin, self).add_view(request, form_url="", extra_context=extra_context) admin.site.register(Notes, NotesAdmin)
解释
add_view 函数帮助我们从下拉列表中选择当前用户。
formfield_for_foreignkey 帮助我们过滤掉其他用户。
通过结合这两个函数,我们得到:
最后一个 get_readonly_fields 函数使该字段创建后无法编辑。