Django中user_id不能为NULL

-1 投票
2 回答
1481 浏览
提问于 2025-04-16 13:06

我有两个模型,一个是用户(User),另一个是客户(Customer)。在客户模型中,我有一个叫做 customer = models.ForeignKey(Customer, related_name='orders') 的字段。我想把用户和客户的表单一起保存,如果其中一个表单出错,那么两个都不应该保存。当我创建一个视图来保存这两个表单时,出现了一个错误,提示 mainsiteapp_customer.user_id 不能为 NULL。

我尝试了各种方法,最后的代码如下:

if request.method == 'POST':
    userform = UserForm(request.POST)
    customerform = CustomerForm(request.POST)          
    if userform.is_valid():
    u = userform.save()

        Customer.user = u
        print Customer.user
        if customerform.is_valid():
           c = customerform.save(commit=False)    

           try:
               c.full_clean()
               c.save()
               print c
               return HttpResponseRedirect('/webshop/')
           except ValidationError, e:
               pass
        u.delete()

else:

    userform = UserForm()
    customerform = CustomerForm()
context = RequestContext(request, {'userform':userform, 'customerform':customerform,})
return render_to_response('userRegister.html', context)

现在已经过去9天了,我还是找不到自己哪里出错了。

如果有人知道我哪里做错了,感谢你!

2 个回答

0

你只需要用一个“与”语句来检查用户表单和客户表单是否都是有效的。

def userForm(request):

    if request.method == 'POST':
        userform = UserForm(request.POST)
        customerform = CustomerForm(request.POST)          
        if userform.is_valid() and customerform.is_valid():
            c = customerform.save()   
            u = userform.save(commit=False)
            u.customer=c
            u.save()
            return HttpResponseRedirect('/webshop/')
    else:
        userform = UserForm()
        customerform = CustomerForm()
    context = RequestContext(request, {'userform':userform, 'customerform':customerform,})
    return render_to_response('userRegister.html', context)
1
Customer.user = u
if customerform.is_valid():
    c = customerform.save(commit=False)

你在这里设置了模型的类变量 user。其实你应该设置客户的用户属性,像这样 c.user = u

撰写回答