【问题标题】:django many to many admin shows all and not associated itemsdjango 多对多管理员显示所有和未关联的项目
【发布时间】:2013-06-13 07:38:52
【问题描述】:

我有一个如下所示的对象结构:

客户 -- 一对多 -- 位置

地点 -- 多对多 -- 部门

部门 -- 一对多 -- 对象

这是我的 models.py(我的 admin.py 是标准的):

class Customer(models.Model):
    customerName = models.CharField(max_length=64)


class Department(models.Model):
    departmentName = models.CharField(max_length=64)


class Location(models.Model):
    customer = models.ForeignKey(Customer)
    departments = models.ManyToManyField(Department)


class Object(models.Model):
    location = models.ForeignKey(Location)
    department = models.ForeignKey(Department)

问题是,当我想为对象设置部门时,我会在 django admin 下拉菜单中找到每个部门。我什至得到了与不同客户的位置相关联的部门。

此外,当我设置对象的部门时,我会得到所有可用部门的相同列表,甚至是与不同客户相关联的部门。

如何让下拉菜单只显示客户支持的部门?

【问题讨论】:

  • 用您的models.py 和您的admin.py 更新有关应用程序的问题。

标签: django django-models django-admin


【解决方案1】:

过滤多对多关系的快速单行解决方案是将此行放在您的管理对象中:

filter_horizo​​ntal = ('部门',)

【讨论】:

    【解决方案2】:

    您可以为自己的表单提供过滤后的查询集

    class DepartmentAdminForm(forms.ModelForm):
        def __init__(self, *args, **kwargs):
            super(DepartmentAdminForm, self).__init__(*args, **kwargs)
            self.fields['customers'].queryset = Customer.objects.filter(...)
    
        class Meta:
           model = Department
    
    
    class DepartmentAdmin(admin.ModelAdmin):
        form = DepartmentAdminForm
    

    【讨论】:

      【解决方案3】:
      猜你喜欢
      • 1970-01-01
      • 2014-09-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-08
      • 1970-01-01
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多