python - Django在管理员中过滤多对多字段?

标签 python django django-models django-admin

我有三个对象:

Thing
  some fields

Bucket
  things = models.ManyToManyField(Thing)

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

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

我该怎么做?换句话说,如何过滤 Bucket admin 中的 Things 列表?

非常感谢您提前提供的帮助。

最佳答案

有一个formfield_for_manytomany .用法和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)

关于python - Django在管理员中过滤多对多字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12170267/

相关文章:

python - 如何在 django 中使用嵌套查找?

python - 按月份排序列表并添加缺少的月份

python - 检查另一个字符串中的单词列表

python - 使用参数 'results' ', '(' { )' and keyword arguments ' polls/(?P<Album_id>[0-9]+)/results/$'] 反转 }' not found. 1 pattern(s) tried: ['

python - Google 应用引擎引用属性关系

python - 在 django 模型中存储类方法

python - pandas 映射带有函数的字符串列

Python Django 不返回新页面也不重新加载

python - 我无法在 Fabric 中使用 virtualenvwrapper 切换 virtualenv

html - 从服务器加载高分辨率图像的低分辨率版本(非 JavaScript 解决方案)