1

Django の学習を始めたばかりで、ModelChoiceField で別のクエリセットを使用したいと考えています。

私はそのような3つのモデルを持っています:

class Politic(models.Model):
    name = models.CharField(max_length=100)

class Economic(models.Model):
    name = models.CharField(max_length=100)

class Category(models.Model):
    politic = models.ForeignKey(Politic, blank = True, null = True)
    economic = models.ForeignKey(Economic, blank = True, null = True)

そしてそのようなフォーム:

class MyForm(forms.Form):
    choice = forms.ChoiceField(choices = (("0", u"---------"), ("1", u"Politic"), 
                                          ("2",  u"Economic")),
                               required=False)

    category = forms.ModelChoiceField(queryset=Economic.objects.all(), 
                                      required=False)

私のテンプレートでは、Ajax を使用して、選択したフィールドに応じたすべてPoliticまたはEconomic値のリストをカテゴリ フィールドに入力します。
しかし、選択"Politic"した場合、フォームの検証で問題が発生します。これは、カテゴリ フィールドのクエリセットがEconomic.objects.all()ではなく であるためPolitic.objects.all()です。
動的クエリセットを変更するにはどうすればよいですか? 何か案は?

4

3 に答える 3

2

政治用と経済用の 2 つの異なる選択を行い、選択フィールドに基づいてそれらを表示/非表示にすることができます。

または、抽象モデルの継承が問題を解決するかもしれません

于 2009-11-18T18:57:25.043 に答える
0

回答ありがとうございます。2つのソリューション(抽象モデルと一般的な関係)を使用しようとしましたが、問題は解決しません。
そこで、2つの異なるModelChoiceField(1つはPolitic用、もう1つはEconomic用)を作成し、テンプレートでJqueryの非表示/表示効果を使用します(Kugelと言うように)。
しかし、私の問題について他に何かアイデアがあれば、私は興味を持っています。

于 2009-11-19T14:27:12.083 に答える
0

1 つの可能性は、モデルでジェネリック リレーションCatagoryを使用することです。

于 2009-11-18T19:02:33.903 に答える