0

私のモデル.py

relay = models.ForeignKey(RelayAddress,related_name="relay")
sister_relay = models.ForeignKey(RelayAddress,related_name="sister_relay")
"RelayAddress" is another table

私のadmin.py

sister = RelayAddress.objects.all()
dict=[]
for i in sister:
    dict.append((i.id,i.display_name()))
    #sister_relay_id=forms.ModelMultipleChoiceField(label=u'sister_relay',widget=forms.CheckboxSelectMultiple(),queryset=RelayAddress.objects.all())
    sister_relay_id=forms.MultipleChoiceField(label=u'sister_relay',widget=forms.CheckboxSelectMultiple(),choices=dict)
def save(self, *args, **kwargs):
    u = self.instance
my_list =self.cleaned_data['sister_relay_id']
...
...
return super(RelaySisterRelationForm, self).save(*args,**kwargs)

質問は:

保存すると、エラーが発生しました、「[u'1']を割り当てることができません:RelayAddress.sister_relayはRelayAddressインスタンスである必要があります」(このように)

モデルで ForeignKey を使用しない場合は、機能します。

ただし、ForeignKeyとチェックボックスを同時に使用し、チェックボックスから複数のデータをリストとして取得し、自由に保存したい。

「ModelMultipleChoiceField」も試しましたが、うまくいきませんでした。

どうすればいいですか?どうもありがとうございました!!!

4

2 に答える 2

0

ModelChoiceFieldが必要です:

sister_relay=forms.ModelChoiceField(queryset=RelayAddress.objects.all())

次に、あなたの見解で:

if request.method.POST:
    form = RelayForm(request.POST, request.FILES)
    if form.is_valid():
       obj = form.save(commit=False)
       obj.sister_relay = form.cleaned_data['sister_relay']
       obj.save()

a の値はModelChoiceFieldクエリセットのインスタンスに変換されます。

于 2013-09-01T05:14:44.573 に答える
0

あなたのコードについて私が理解できないのは、どのようにしてリストを ForeignKey フィールドに格納できるかということです。

モデルに複数の「sister_relay」を含める必要がある場合、このフィールドは ForeignKey フィールドではなく ManyToManyField にする必要があります。そうすれば、ModelMultipleChoiceField は完全に機能します。

モデルに複数の「sister_relay」を含めない場合、フォームで MultipleChoiceField を使用する理由はありません。ModelChoiceField で十分です。

https://docs.djangoproject.com/en/dev/ref/models/fields/

于 2013-09-02T02:46:58.130 に答える