Django在管理员中过滤多个到多个字段?

时间:2012-08-29 02:50:37

标签: 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管理员中过滤事物列表?

非常感谢您的帮助。

3 个答案:

答案 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)

相关问题