在视图中保存时设置 user_id - Django

2024-01-05

我需要在添加视图中设置创建帖子的用户:

@login_required 
def add(request):
    if request.method == 'POST':
        form = BusinessForm(request.POST)
        form.user_id = request.user.id
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('listing.views.detail'), args=(f.id))
    else:
        form = BusinessForm()
    return render_to_response('business/add.html', {'form':form},
        context_instance=RequestContext(request))

我分配用户idform.user_id = request.user.id但保存时,它仍然给我一个错误Column user_id cannot be null

难道我做错了什么?谢谢

EDIT:

我将用户从模型中的表单中排除:

class BusinessForm(ModelForm):
    class Meta:
        model = Business
        exclude = ('user',)

这可能是导致问题的原因吗?我该如何解决这个问题?

EDIT 2:

按照建议编辑了我的 BusinessForm() 类,但不起作用:

class BusinessForm(ModelForm):
    class Meta:
        model = Business
        exclude = ('user',)
    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        return super(BusinessForm, self).__init__(*args, **kwargs)

    def save(self, *args, **kwargs):
        kwargs['commit']=False
        obj = super(BusinessForm, self).save(*args, **kwargs)
        if self.request:
            obj.user = self.request.user
        obj.save()

商业模式

class Business(models.Model):
    name = models.CharField(max_length=200)
    user = models.ForeignKey(User, unique=False)
    description = models.TextField()
    category = models.ForeignKey(Category)
    address = models.CharField(max_length=200)
    phone_number = models.CharField(max_length=10)
    website = models.URLField()
    image = models.ImageField(upload_to='business_pictures',blank=True)

你不必使用init or save为此覆盖。

您只需在表单上设置一个属性,表单不会对其执行任何操作。它的行为并不神奇地像模型实例(您的表单不会有user_id属性)。

由于您的表格是ModelForm,你可以简单地调用 save 方法commit=False https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method要获取未保存的实例,请设置用户,然后调用save在实例上。

 if request.method == 'POST':
    form = BusinessForm(request.POST)
    if form.is_valid():
        business = form.save(commit=False)
        business.user = request.user
        business.save()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在视图中保存时设置 user_id - Django 的相关文章

随机推荐