Django在管理员中过滤多对多字段? [英] Django filter many to many field in admin?
问题描述
我有三个对象:
Thing
some fields
Bucket
things = models.ManyToManyField(Thing)
User
buckets = models.ManyToManyField(Bucket)
things = models.ManyToManyField(Thing)
在管理员中编辑 Bucket字段时,我希望能够选择事物,但只能选择事物中的事物。当前登录用户的内容列表。
When editing my "Bucket" field in the admin, I want to be able to select Things, but only those things that are in the "Things" list on the user currently logged in.
我该怎么做?换句话说,如何在Bucket管理员中过滤事物列表?
How can I do that? In other words, how can I filter the list of Things in the Bucket admin?
非常感谢您的提前帮助。
Thank you very much for your help in advance.
推荐答案
有一个 formfield_for_manytomany 。用法类似于defuz给出的答案。
There is a formfield_for_manytomany. Usage is similar to the answer given by defuz.
ModelAdmin.formfield_for_manytomany(db_field, request, **kwargs)¶
就像 formfield_for_foreignkey
方法一样,可以覆盖 formfield_for_manytomany
方法,以将
默认表单字段更改为多对多字段。例如,如果所有者
可以拥有多辆汽车,并且汽车可以属于多个所有者-多个
对许多关系-您可以将汽车外键字段过滤为
,仅显示拥有的汽车由用户:
Like the formfield_for_foreignkey
method, the formfield_for_manytomany
method can be overridden to change the
default formfield for a many to many field. For example, if an owner
can own multiple cars and cars can belong to multiple owners – a many
to many relationship – you could filter the Car foreign key field to
only display the cars owned by the User:
class MyModelAdmin(admin.ModelAdmin):
def formfield_for_manytomany(self, db_field, request, **kwargs):
if db_field.name == "cars":
kwargs["queryset"] = Car.objects.filter(owner=request.user)
return super(MyModelAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)
这篇关于Django在管理员中过滤多对多字段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!