Django 过滤管理中的多对多字段? [英] Django filter many to many field in admin?

查看:32
本文介绍了Django 过滤管理中的多对多字段?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有三个对象:

东西一些领域桶东西 = 模型.ManyToManyField(Thing)用户桶 = 模型.ManyToManyField(Bucket)东西 = 模型.ManyToManyField(Thing)

在管理员中编辑我的存储桶"字段时,我希望能够选择事物,但只能选择当前登录用户的事物"列表中的那些事物.

我该怎么做?换句话说,我如何过滤 Bucket 管理中的事物列表?

非常感谢您提前提供帮助.

解决方案

有一个 formfield_for_manytomany.用法类似于defuz给出的答案.

<块引用>

ModelAdmin.formfield_for_manytomany(db_field, request, **kwargs)¶

formfield_for_foreignkey 方法一样,可以覆盖 formfield_for_manytomany 方法以更改多对多字段的默认表单字段.例如,如果所有者可以拥有多辆汽车,汽车可以属于多个所有者——很多到许多关系 - 您可以过滤 Car 外键字段以只显示用户拥有的汽车:

class MyModelAdmin(admin.ModelAdmin):def formfield_for_manytomany(self, db_field, request, **kwargs):如果 db_field.name == 汽车":kwargs["queryset"] = Car.objects.filter(owner=request.user)return super(MyModelAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)

I have three objects:

Thing
  some fields

Bucket
  things = models.ManyToManyField(Thing)

User
  buckets = models.ManyToManyField(Bucket)
  things = models.ManyToManyField(Thing)

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.

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.

解决方案

There is a formfield_for_manytomany. Usage is similar to the answer given by defuz.

ModelAdmin.formfield_for_manytomany(db_field, request, **kwargs)¶

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆