1

次のようなオブジェクト構造があります。

顧客 -- 1 対多 -- 場所

場所 -- 多対多 -- 部署

部門 -- 1 対多 -- オブジェクト

これが私の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 ドロップダウンですべての部門を取得することです。さまざまな顧客の場所に関連付けられている部門も取得します。

また、オブジェクトの部門を設定すると、異なる顧客に関連付けられている部門であっても、利用可能なすべての部門の同じリストが表示されます。

顧客がサポートしている部門のみをドロップダウンに表示するにはどうすればよいですか?

4

3 に答える 3

1

多対多の関係をフィルタリングする簡単な 1 行のソリューションは、次の行を管理オブジェクトに配置します。

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

于 2013-06-12T23:38:52.267 に答える
0

答えは formfield_for_manytomany を使用することだと思います

https://docs.djangoproject.com/en/1.4/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey

于 2013-05-17T16:38:08.213 に答える
0

フィルタリングされたクエリセットを使用して独自のフォームを提供できます

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
于 2013-05-16T06:29:52.303 に答える