将新产品与django中的当前用户关联



当前如果我尝试添加新产品,我会收到以下错误IntegrityError"NOT NULL约束失败:products.merchant_id"我想要实现的是将产品与当前用户相关联。

型号.py

class Product(models.Model):
name = models.CharField(max_length=255, unique=True)
date_added = models.DateTimeField(auto_now_add=True)
merchant=models.ForeignKey(Merchant, on_delete=models.CASCADE,null=True)
class Merchant(models.Model):
user=models.OneToOneField(User,on_delete=models.CASCADE, primary_key=True)

views.py

def addproduct(request):
if request.method=='POST':
form=ProductForm(request.POST)
if form.is_valid():
new_product=form.save(commit=False)
new_product.merchant__user=request.user
new_product.save()
return HttpResponseRedirect('users:users_homepage')
else:
form=ProductForm()
context={'form':form}
return render(request,'users/addproduct.html',context)

这里的问题是,您还没有创建一个Merchant对象来配合您的Product。因此,你不能将用户分配给一个还不存在的商家。你需要做这样的事情:

...
if form.is_valid():
new_product=form.save(commit=False)
merchant, _ = Merchant.objects.get_or_create(user=request.user)
new_product.merchant = merchant
new_product.save()
return HttpResponseRedirect('users:users_homepage')

仅供参考:您正在使用的双下划线表示法用于查询模型,不能将其仅用作链接属性的等价物。

我想你有可能在你的ProductForm保存方法中创建一个商人实例。如果你已经做到了,那么你只需要做:

merchant = new_product.merchant
merchant.user = request.user
merchant.save()

最新更新