我有三个对象:
Thing
some fields
Bucket
things = models.ManyToManyField(Thing)
User
buckets = models.ManyToManyField(Bucket)
things = models.ManyToManyField(Thing)
编辑我的" Bucket"管理员中的字段,我希望能够选择“事物”,但只能选择“事物”中的事物。列出当前登录的用户。
我该怎么做?换句话说,如何在Bucket管理员中过滤事物列表?
非常感谢您的帮助。
答案 0 :(得分:23)
阅读the docs:
class BucketAdmin(admin.ModelAdmin):
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "things":
kwargs["queryset"] = Things.objects.filter(...)
return super(BucketAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
答案 1 :(得分:23)
有一个formfield_for_manytomany。用法类似于defuz给出的答案。
ModelAdmin.formfield_for_manytomany(db_field, request, **kwargs)¶
与
formfield_for_foreignkey
方法类似,可以重写formfield_for_manytomany
方法来更改。{1}}方法 多个字段的默认表单字段。例如,如果是所有者 可以拥有多辆汽车,汽车可以属于多个车主 - 很多 很多关系 - 你可以过滤汽车外键字段 仅显示用户拥有的汽车: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)
答案 2 :(得分:0)