我有一个相对简单的数据模型,其中包含User
,Group
和Task
。每个小组都有自己的任务和用户。只能将用户分配到一个组。
任务属于组,每个任务都有用户的manyToMany
字段,因此可以为多个用户分配相同的任务。
在管理员中,为用户分配任务时,它会显示所有已创建的用户,我希望它仅显示与任务属于同一组的用户。
什么是最好的方法?
我已经检查了admin.ModelAdmin
的可用自定义选项,但没有发现与我的问题有关的任何内容。
答案 0 :(得分: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)
答案 1 :(得分:1)
您可以使用以下方法自定义模型管理员: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)