2013-05-16 35 views
1

我有一个对象结构,看起来像这样:Django的多对多管理显示了所有不相关的项目

客户 - 一对多 - 位置

地点 - 多对多 - 部门

部门 - 一对多 - 在这里对象

是我的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中的每个部门都下拉。我甚至会得到与不同客户位置相关的部门。

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

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

+0

使用您的'models.py'和您的'admin.py'更新涉及的应用程序的问题。 –

回答

1

一个快速在线解决方案来过滤下来多对多关系被放在你的管理对象中:

filter_horizo​​ntal =('departments',)

0

您可以提供自己的形式与过滤的queryset

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 
相关问题