• Django Admin:自动选择当前用户


    --转载自:林肯李

    该文章写的很好,特转载留待后期备用

    背景

    在开发 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 函数使该字段创建后无法编辑。

  • 相关阅读:
    第一次用NUnitAsp
    IT能够解决所有的商业问题吗?
    在这种东西里面,你会自在吗?
    看了段.net show之后的感想
    获取当前数据库中所有表的记录数
    对瀑布模型各阶段的解释
    Linux内核中的slab/slob/slub 在搞晕前先记下来
    分布式事务AT、TCC、Saga、XA 模式分析对比
    读懂Windows的“虚拟内存”为你量身定制
    示范NTFS 卷上的硬链接
  • 原文地址:https://www.cnblogs.com/shiyixirui/p/15066773.html
Copyright © 2020-2023  润新知