【发布时间】:2018-01-15 21:37:42
【问题描述】:
这建立在:Django automatically set foreign key in form (with class based views)。那里的答案似乎可行,但 Django 抛出 ValueError
我有 (2) 个模型:通过外键关联的产品和过程。我想从产品页面获得一个链接来添加程序,并让产品 FK(通过其 pk)自动传递到表单。有几千种产品,因此从下拉列表中手动选择 FK 是不可行的。
class ProductBase(models.Model):
id = models.UUIDField(primary_key=True,default=uuid.uuid4,null=False)
name = models.CharField(max_length=128,null=False)
class ProcedureText(models.Model):
id_procedure = models.UUIDField(primary_key=True,default=uuid.uuid4,null=False)
text_procedure = models.TextField()
parent_product = models.ForeignKey(ProductBase,on_delete=models.CASCADE')
我有一个来自产品详细信息页面的链接来调用 CreateView:
<a class='btn btn-success' href="{% url 'products:addprocedure' pk=product_details.pk %}">Add Procedure</a>
通过urls.py映射:
path('addprocedure <pk>',views.AddProcedureView.as_view(),name='addprocedure'),
class AddProcedureView(CreateView):
form_class = AddProcedureForm
template_name = 'addprocedure.html'
model = ProcedureText
#fields = ('__all__')
def form_valid(self, form):
form.instance.parent_recipe = self.kwargs.get('pk')
return super(AddProcedureView, self).form_valid(form)
在 forms.py 中调用
class AddProcedureForm(forms.ModelForm):
class Meta:
model = ProcedureText
fields = ('__all__')
并模板化为标准形式:
<form class="form-horizontal" action="" enctype="multipart/form-data" method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="btn btn-primary">Submit</button>
</form>
每当提交表单时,Django都会返回表单的ValueError:
无法分配“'28a3a242-06f6-464a-9b01-aa3fefa866ed'”:“ProcedureText.parent_product”必须是“ProductBase”实例。
即使被拒绝的 UUID 是传递给它的 UUID,并且它是一个实际的现有 ProductBase 实例。传递给它的任何实例 UUID 都会出现此问题。
有没有想过这里出了什么问题?
【问题讨论】:
标签: django