我有两个型号:prodcut_prices和WrongPrice。
在WrongPrice中,用户可以纠正报告错误的价格-当报告价格时,它也应该在product_price中更新。
我的问题是,尽管我一开始就将product_price实例化为instance_productprice,但它的所有必填字段都会返回"this field to be filled“错误。当我使用实例instance_productprice = product_prices.objects.filter(id=pk)[0]时,为什么没有设置这些字段?请注意,product_prices中的所有字段都是非空的,因为它们是从product_price模型中拉出的,该模型是在另一个视图中处理的,因此这不是问题所在。
def wrong_price(request,pk):
#Get the current price object
instance_productprice = product_prices.objects.filter(id=pk)[0]
#Get different values
wrong_link = instance_productprice.link
img_url = instance_productprice.image_url
wrong_price = instance_productprice.last_price
domain = instance_productprice.domain
# Create instances
instance_wrongprice = WrongPrice(
link=wrong_link,
correct_price=wrong_price,
domain = domain)
if request.method == "POST":
form_wrong_price = wrong_price_form(request.POST,instance=instance_wrongprice)
# Update values in product_prices
form_product_price = product_prices_form(request.POST,instance=instance_productprice)
form_product_price.instance.start_price = form_wrong_price.instance.correct_price
form_product_price.instance.last_price = form_wrong_price.instance.correct_price
if form_wrong_price.is_valid() & form_product_price.is_valid():
form_wrong_price.save()
form_product_price.save()
messages.success(request, "Thanks")
return redirect("my_page")
else:
messages.error(request, form_product_price.errors) # Throws empty-field errors,
messages.error(request, form_wrong_price.errors)
return redirect("wrong-price", pk=pk)
else:
form_wrong_price = wrong_price_form(instance=instance_wrongprice)
return render(request, "my_app/wrong_price.html",context={"form":form_wrong_price,"info":{"image_url":img_url}})发布于 2021-05-14 04:03:26
我有点搞不懂你是怎么实现它的。您已经通过表单传递了一个WrongPrice价格的实例,这是不必要的,您可以使用initial
wrong_values = dict(
link=wrong_link,
correct_price=wrong_price,
domain = domain
)
form_wrong_price = wrong_price_form(initial= wrong_values)然后将form_wrong_price实例中的值添加到product_prices_form中。我不明白为什么你需要在这里再次使用表单。您可以简单地使用:
form_wrong_price = wrong_price_form(request.POST, initial= wrong_values)
if form_wrong_price.is_valid():
instance = form_wrong_price.save()
instance_productprice.start_price = instance.correct_price
instance_productprice.last_price = instance.correct_price
instance_productprice.save()最后,请在定义类名时使用PascalCase。您可以通过product_prices.objects.get(id=pk)(而不是filter())获得产品价格。
https://stackoverflow.com/questions/67525181
复制相似问题