Python Django过滤器管理中的多对多字段?
我有三个目标:Python Django过滤器管理中的多对多字段?,python,django,django-models,django-admin,Python,Django,Django Models,Django Admin,我有三个目标: Thing some fields Bucket things = models.ManyToManyField(Thing) User buckets = models.ManyToManyField(Bucket) things = models.ManyToManyField(Thing) 在管理中编辑我的“Bucket”字段时,我希望能够选择内容,但只能选择当前登录用户的“内容”列表中的内容 我该怎么做?换句话说,如何过滤Bucket admin中的
Thing
some fields
Bucket
things = models.ManyToManyField(Thing)
User
buckets = models.ManyToManyField(Bucket)
things = models.ManyToManyField(Thing)
在管理中编辑我的“Bucket”字段时,我希望能够选择内容,但只能选择当前登录用户的“内容”列表中的内容
我该怎么做?换句话说,如何过滤Bucket admin中的内容列表
非常感谢您事先提供的帮助。可以使用或。阅读:
有一个问题。用法与defuz给出的答案类似
与foreignkey的formfield\u
方法类似,可以覆盖formfield\u for多个
方法来更改
多对多字段的默认formfield。例如,如果一个所有者
可以拥有多辆汽车,而且汽车可以属于多个车主——很多人
对多个关系–您可以将汽车外键字段筛选为
仅显示用户拥有的车辆:
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)
请注意,
super()
需要参数:返回super(MyModelAdmin,self)。formfield\u for_manytomy(db\u field,request,**kwargs)
@Travissuper()
不需要python3中的参数。请注意,formfield\u for_for_foreignkey
用于foreignkey,和formfield\u表示多个
表示多个表示多个表示多个表示多个。还请注意,在python3中,您可以使用super()
而不是super(BucketAdmin,self)
。
ModelAdmin.formfield_for_manytomany(db_field, request, **kwargs)¶
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)