0

我的模型.py

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

我的管理员.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,它可以工作。

但我想同时使用外键和复选框,从复选框中获取多个数据作为列表,并随意保存。

我也试过“ModelMultipleChoiceField”,不行。

我应该怎么做?非常感谢帮助!!!

4

2 回答 2

0

我对您的代码不了解的是,您如何将列表存储到 ForeignKey 字段中。

如果您的模型应该有多个“sister_relay”,则该字段应该是 ManyToManyField 而不是 ForeignKey 字段。如果这样做,ModelMultipleChoiceField 将完美运行。

如果模型不应该有多个“sister_relay”,那么就没有理由在表单中使用 MultipleChoiceField,一个 ModelChoiceField 就足够了。

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

于 2013-09-02T02:46:58.130 回答
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 回答