【问题标题】:How to solve ValueError When save ModelMultipleChoiceField in ModelForm?在ModelForm中保存ModelMultipleChoiceField时如何解决ValueError?
【发布时间】:2013-09-02 04:25:53
【问题描述】:

我的模型.py:

class RelayAddress(models.Model):
    id = models.AutoField(primary_key=True,default=0)
    sister_relay_relation = models.ManyToManyField('self', through='RelaySisterRelation',symmetrical=False)

    def save(self, *args, **kwargs):
        self.update_time = int(time.time())
        super(RelayAddress,self).save(*args, **kwargs)

class RelaySisterRelation(models.Model):
    id = models.AutoField(primary_key=True,default=0)
    relay = models.ForeignKey(RelayAddress,related_name="relay")
    sister_relay = models.ForeignKey(RelayAddress,related_name="sister_relay")

我的管理员.py

class RelaySisterRelationForm(forms.ModelForm):
    relay=forms.ModelMultipleChoiceField(label=u'relay',widget=forms.CheckboxSelectMultiple(),queryset=RelayAddress.objects.all())
    sister_relay=forms.ModelMultipleChoiceField(label=u'sister_relay',widget=forms.CheckboxSelectMultiple(),queryset=RelayAddress.objects.all())

    def save(self, *args, **kwargs):
        return super(RelaySisterRelationForm, self).save(*args,**kwargs)

而我的 view.py 为空,然后我得到一个 ValueError:

Cannot assign "[<RelayAddress: RelayAddress object>]": "RelaySisterRelation.relay" must be a "RelayAddress" instance.

以及如何解决这个问题。

【问题讨论】:

    标签: python django


    【解决方案1】:

    RelaySisterRelation.relayRelayAddress 的 ForeignKey,这意味着它只能存储对一个 RelayAddress 的引用,但您的 RelaySisterRelationForm.relay 使用 ModelMultipleChoiceField 用于多对多关系,因此返回一个(可能为空) RelayAddress 实例列表。

    【讨论】:

    • 那么,如何解决这个P?
    • 使用ModelChoiceField 而不是ModelMultipleChoiceField
    • 非常感谢!但是我已经在 RelayAddress 类中使用了“ManyToManyField”,我应该如何在 '''class RelaySisterRelation(models.Model): id = models.AutoField(primary_key=True,default=0) relay = models.ForeignKey(RelayAddress ,related_name="relay") Sister_relay = models.ForeignKey(RelayAddress,related_name="sister_relay")''' 我想从 chechbox 中获取多个数据,所以我不能使用“ModelChoiceField”。
    • 我不确定你想要达到什么目标,所以很难给你答案。
    • 当点击“保存”按钮时,我想通过“cleaned_data['sister_relay']”从复选框中获取多个数据,然后将这些数据完全排列,并成对保存。所以错误如上所述发生“...ValueError ...”。对不起我的不好的陈述。
    猜你喜欢
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    相关资源
    最近更新 更多