问题描述
首先,我是 Django 的新手,如果我有任何愚蠢的问题,我提前为浪费您的时间道歉。
我正在尝试在 Django 中创建一个电子商务项目,并且需要将产品变体添加到数据库中。这样做的正确方法是什么?我已经走了这么远,但不能再进一步了。如果您能提供帮助,我将不胜感激。
我想做什么:
错误: SkuForm.variation_value1 不是 VariationValuesModel 的实例。
表格:
class ProductsForm(forms.ModelForm):
class Meta:
model = ProductsModel
fields = ['name',]
class SkusForm(forms.ModelForm):
variation_value1 = forms.ModelMultipleChoiceField(queryset=VariationValuesModel.objects.filter(variation_id=2).order_by("name"),required=False,widget=forms.SelectMultiple(attrs={
'id' : 'var_color','class' : 'form-control selectpicker','title' : 'Select Color',}))
variation_value2 = forms.ModelMultipleChoiceField(queryset=VariationValuesModel.objects.filter(variation_id=1).order_by("name"),widget=forms.SelectMultiple(attrs={
'id' : 'var_size','title' : 'Select Size',}))
variation_value3 = forms.ModelMultipleChoiceField(queryset=VariationValuesModel.objects.filter(variation_id=3).order_by("name"),widget=forms.SelectMultiple(attrs={
'id' : 'var_pattern','title' : 'Select Pattern',}))
class Meta:
model = SkusModel
fields = ['variation_value1','variation_value2','variation_value3',]
型号:
class ProductsModel(models.Model):
name = models.CharField(max_length = 200,blank=False,null=False,class SkusModel(models.Model):
product = models.ForeignKey(ProductsModel,related_name='product_sku',on_delete=models.DO_nothing)
variation_value1 = models.ForeignKey(VariationValuesModel,related_name='VariationValue1_sku',blank=True,null=True,on_delete=models.DO_nothing)
variation_value2 = models.ForeignKey(VariationValuesModel,related_name='VariationValue2_sku',on_delete=models.DO_nothing)
variation_value3 = models.ForeignKey(VariationValuesModel,related_name='VariationValue3_sku',on_delete=models.DO_nothing)
class VariationValuesModel(models.Model):
name = models.CharField(max_length = 200,editable=True,unique=False,default="Default variation value name")
查看:
def ProductCreate(request):
if request.method == "POST":
product_form = ProductsForm(request.POST)
sku_form = SkusForm(request.POST)
#if form submit
if 'addproduct_submit' in request.POST:
#if product has variations
if 'variation_value1' in request.POST or 'variation_value2' in request.POST or 'variation_value3' in request.POST:
if product_form.is_valid():
form = product_form.save(commit=False)
form.company = request.user.company
product = product_form.save()
for var1 in request.POST.getlist('variation_value1'):
var1 = VariationValuesModel.objects.get(id=var1)
for var2 in request.POST.getlist('variation_value2'):
var2 = VariationValuesModel.objects.get(id=var2)
for var3 in request.POST.getlist('variation_value3'):
var3 = VariationValuesModel.objects.get(id=var3)
SkusModel.objects.create(
product = product,variation_value1 = var1,variation_value2 = var2,variation_value3 = var3,)
else:
messages.info(request,'The informations are invalid,please try again.')
#if simple product (no variations)
else:
if product_form.is_valid() and sku_form.is_valid() and image_form.is_valid():
form = product_form.save(commit=False)
form.company = request.user.company
product = product_form.save()
sku = sku_form.save(commit=False)
sku.product = product
sku.save()
messages.info(request,'The product saved.')
return HttpResponseRedirect(request.Meta.get('HTTP_REFERER','redirect_if_referer_not_found'))
else:
messages.info(request,please try again.')
#if not submit redirect to category select page
else:
return redirect('product-category-select')
context = {
'product_form' : product_form,'sku_form' : sku_form,}
return render(request,'pages/product_add.html',context)
模板:
<!-- variations -->
{% if variations %}
{% for var in variations %}
<div class="form-group row">
<label class="col-form-label text-left col-lg-1 col-sm-12">{{ var }}</label>
<div class="col-lg-3 col-md-9 col-sm-12">
{% if var.id == 2 %}
{{ sku_form.variation_value1 }}
{% elif var.id == 1 %}
{{ sku_form.variation_value2 }}
{% elif var.id == 3 %}
{{ sku_form.variation_value3 }}
{% endif %}
</div>
</div>
{% endfor %}
<button id="var_generate" type="button" class="offset-lg-1 btn btn-warning mr-2">Generate</button>
{% else %}
<span>There is no variations info.</span><br>
{% endif %}
<!-- variations end -->
***This is what "Generate Button" create for variations***
<td>
<input type="hidden" class="form-control" name="variation_value1" readonly="" value="3">
<input type="text" class="form-control" disabled="" value="Black">
</td>
<td>
<input type="hidden" class="form-control" name="variation_value2" readonly="" value="2">
<input type="text" class="form-control" disabled="" value="M">
</td>
<td>
<input type="hidden" class="form-control" name="variation_value3" readonly="" value="4">
<input type="text" class="form-control" disabled="" value="Square">
</td>
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)