my models.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和checkbox,从复选框中获取多个数据作为列表,并保存在我的意愿中。
我也试过“ModelMultipleChoiceField”,不行。
我该怎么办?非常感谢你的帮助!!!
答案 0 :(得分: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()
ModelChoiceField
的值将转换为查询集的实例。
答案 1 :(得分:0)
我对您的代码不了解的是,您如何将列表存储到ForeignKey字段中。
如果您的模型应该有多个“sister_relay”,则此字段应为ManyToManyField而不是ForeignKey字段。如果这样做,ModelMultipleChoiceField将完美运行。
如果模型不应该有多个“sister_relay”,那么没有理由在表单中使用MultipleChoiceField,ModelChoiceField就足够了。