【问题标题】:Django Admin: Show only some objects in ManyToMany field?Django Admin:仅在 ManyToMany 字段中显示一些对象?
【发布时间】:2019-11-11 23:40:15
【问题描述】:

我有 UserGroupTask 的相对简单的数据模型。每个组都有自己的任务和用户。用户只能分配到一个组。

任务属于组,每个任务都有manyToMany 字段供用户使用,因此可以为多个用户分配相同的任务。

在我的管理员中,当将用户分配给任务时,它会显示所有创建的用户,我希望它只显示与任务来自同一组的用户。

最好的方法是什么?

我检查了admin.ModelAdmin 的可用自定义选项,但没有找到与我的问题相关的任何内容。

【问题讨论】:

    标签: django django-models django-admin


    【解决方案1】:

    你可以使用formfield_for_manytomany

    formfield_for_manytomany 方法可以被覆盖以更改多对多字段的默认表单字段

    在您的情况下,将您的 admin.py 更改为:

    class TaskAdmin(admin.ModelAdmin):
    
        def get_object(self, request, object_id, s):
            # Hook obj for use in formfield_for_manytomany
            self.obj = super(TaskAdmin, self).get_object(request, object_id)
            # print ("Got object:", self.obj)
            return self.obj
    
    
        def formfield_for_manytomany(self, db_field, request, **kwargs):
            if db_field.name == "user":
                kwargs["queryset"] = User.objects.filter(task=self.obj)
            return super().formfield_for_manytomany(db_field, request, **kwargs)
    
    admin.site.register(Task, TaskAdmin)
    

    【讨论】:

    • 谢谢,这看起来像我需要的,但我不知道如何访问当前打开的Task 对象以过滤其Group 是否与用户组相同。
    • django中有一个get_object()方法可以获取Task对象
    • 谢谢,我找到了这种方法,但显然它并不总是有效并且没有记录......但如果没有其他方法......
    • get_object() 是我认为的唯一方法
    【解决方案2】:

    您可以使用方法自定义模型管理员:formfield_for_manytomany

    class TaskAdmin(admin.ModelAdmin):
    
        def formfield_for_manytomany(self, db_field, request, **kwargs):
            if db_field.name == "users":
                # Filter your users below as per your condition
                kwargs["queryset"] = Users.objects.filter()
            return super(TaskAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)
    

    【讨论】:

    • 谢谢,这看起来像我需要的,但我不知道如何访问当前打开的Task 对象以过滤其Group 是否与用户组相同。
    猜你喜欢
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多