无法分配“'4'”:"Element.value_code" 必须是 "Value" 实例
Cannot assign "'4'": "Element.value_code" must be a "Value" instance
我正在尝试保存 element.value_code,但出现此错误。如果我在 getlist 上得到 value_code,我的任务就结束了。我应该如何纠正这个错误?如果你能告诉我,我将不胜感激。
错误:
Cannot assign "'4'": "Element.value_code" must be a "Value" instance.
models.py
只有与值和元素相关的模型,但我们添加了所有模型以帮助您理解为什么存在 option_code 和 designated_code。
class Option(models.Model):
option_code = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
product_code = models.ForeignKey(Product, on_delete=models.CASCADE, db_column='product_code')
def __str__(self):
return self.name
class Meta:
ordering = ['option_code']
class Value(models.Model):
value_code = models.AutoField(primary_key=True)
option_code = models.ForeignKey(Option, on_delete=models.CASCADE, db_column='option_code')
product_code = models.ForeignKey(Product, on_delete=models.CASCADE, db_column='product_code')
name = models.CharField(max_length=32)
extra_cost = models.IntegerField()
def __str__(self):
return self.name
class Meta:
ordering = ['value_code']
class Designated(models.Model):
designated_code = models.AutoField(primary_key=True)
product_code = models.ForeignKey(Product, on_delete=models.CASCADE, db_column='product_code')
price = models.IntegerField()
rep_price = models.BooleanField(default=True)
class Meta:
ordering = ['designated_code']
def __str__(self):
return str(self.designated_code)
class Element(models.Model):
element_code = models.AutoField(primary_key=True)
designated_code = models.ForeignKey(Designated, on_delete=models.CASCADE, db_column='designated_code')
value_code = models.ForeignKey(Value, on_delete=models.CASCADE, db_column='value_code', null=True, blank=True)
class Meta:
ordering = ['element_code']
def __str__(self):
return str(self.element_code)
views.py
if request.method == "POST":
form = ElementForm(request.POST)
if form.is_valid():
for value_code2 in request.POST.getlist('value_code2'):
element = Element()
element.designated_code = Designated.objects.get(product_code=id)
element.value_code = value_code2
element.save()
else:
element = Element()
element.designated_code = Designated.objects.get(product_code=id)
element.value_code = None
element.save()
forms.py
class ElementForm(forms.Form):
value_code2 = forms.ModelChoiceField(error_messages={'required': "옵션을 선택하세요."}, label="옵션", queryset=Value.objects.all())
您正在向您的url发送PK
或ID
。
为了在发送的 PK
和你的 Element
模型之间建立关系,你应该给 Element
一个 Value
的对象,而不是它的 PK
当你使用 for value_code2 in request.POST.getlist('value_code2')
时,value_code2
是 PK
,这是错误的
你的解决方案可以是在将数据传递给 ElementForm
之后,这 returns 你一些 cleaned_data
如果 form.is_valid()
。在那个 cleaned_data
中应该有 Value
object:
...
if form.is_valid():
element = Element()
element.designated_code = Designated.objects.get(product_code=id)
element.value_code = form.cleaned_data['value_code2']
element.save()
阅读 https://docs.djangoproject.com/en/3.2/ref/forms/api/#django.forms.Form.cleaned_data
中的 cleaned_data
我正在尝试保存 element.value_code,但出现此错误。如果我在 getlist 上得到 value_code,我的任务就结束了。我应该如何纠正这个错误?如果你能告诉我,我将不胜感激。
错误:
Cannot assign "'4'": "Element.value_code" must be a "Value" instance.
models.py
只有与值和元素相关的模型,但我们添加了所有模型以帮助您理解为什么存在 option_code 和 designated_code。
class Option(models.Model):
option_code = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
product_code = models.ForeignKey(Product, on_delete=models.CASCADE, db_column='product_code')
def __str__(self):
return self.name
class Meta:
ordering = ['option_code']
class Value(models.Model):
value_code = models.AutoField(primary_key=True)
option_code = models.ForeignKey(Option, on_delete=models.CASCADE, db_column='option_code')
product_code = models.ForeignKey(Product, on_delete=models.CASCADE, db_column='product_code')
name = models.CharField(max_length=32)
extra_cost = models.IntegerField()
def __str__(self):
return self.name
class Meta:
ordering = ['value_code']
class Designated(models.Model):
designated_code = models.AutoField(primary_key=True)
product_code = models.ForeignKey(Product, on_delete=models.CASCADE, db_column='product_code')
price = models.IntegerField()
rep_price = models.BooleanField(default=True)
class Meta:
ordering = ['designated_code']
def __str__(self):
return str(self.designated_code)
class Element(models.Model):
element_code = models.AutoField(primary_key=True)
designated_code = models.ForeignKey(Designated, on_delete=models.CASCADE, db_column='designated_code')
value_code = models.ForeignKey(Value, on_delete=models.CASCADE, db_column='value_code', null=True, blank=True)
class Meta:
ordering = ['element_code']
def __str__(self):
return str(self.element_code)
views.py
if request.method == "POST":
form = ElementForm(request.POST)
if form.is_valid():
for value_code2 in request.POST.getlist('value_code2'):
element = Element()
element.designated_code = Designated.objects.get(product_code=id)
element.value_code = value_code2
element.save()
else:
element = Element()
element.designated_code = Designated.objects.get(product_code=id)
element.value_code = None
element.save()
forms.py
class ElementForm(forms.Form):
value_code2 = forms.ModelChoiceField(error_messages={'required': "옵션을 선택하세요."}, label="옵션", queryset=Value.objects.all())
您正在向您的url发送PK
或ID
。
为了在发送的 PK
和你的 Element
模型之间建立关系,你应该给 Element
一个 Value
的对象,而不是它的 PK
当你使用 for value_code2 in request.POST.getlist('value_code2')
时,value_code2
是 PK
,这是错误的
你的解决方案可以是在将数据传递给 ElementForm
之后,这 returns 你一些 cleaned_data
如果 form.is_valid()
。在那个 cleaned_data
中应该有 Value
object:
...
if form.is_valid():
element = Element()
element.designated_code = Designated.objects.get(product_code=id)
element.value_code = form.cleaned_data['value_code2']
element.save()
阅读 https://docs.djangoproject.com/en/3.2/ref/forms/api/#django.forms.Form.cleaned_data
中的cleaned_data