django - 在 View 中保存时设置 user_id - Django

标签 django django-forms

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

@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))

我分配了用户 id form.user_id = request.user.id 但保存时,它仍然给我一个错误 Column user_id cannot be null
难道我做错了什么?谢谢

编辑:

我从模型中的表单中排除了用户:
class BusinessForm(ModelForm):
    class Meta:
        model = Business
        exclude = ('user',)

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

编辑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)

最佳答案

您不必为此使用 initsave 覆盖。

您只是在表单上设置了一个属性,而表单对它没有任何作用。它不像模型实例那么神奇(你的表单没有 user_id 属性)。

由于您的表单是 ModelForm ,您可以简单地使用 commit=False 调用 save 来获取未保存的实例,设置用户,然后在实例上调用 save

 if request.method == 'POST':
    form = BusinessForm(request.POST)
    if form.is_valid():
        business = form.save(commit=False)
        business.user = request.user
        business.save()

关于django - 在 View 中保存时设置 user_id - Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8632087/

相关文章:

django - 使用数据库结果更新 Django 选择字段

python - 将 Jython 与 Django 结合使用

python - 将 request.user 参数传递给 modelformset_factory 表单

python - 值错误 : invalid literal for int() with base 10 with django. 设置()

django - 如何将数据添加到数据库?

jquery - 如何将 jQuery slider 的值保存到 Person 模型中?

python - Django 管理员 : how to format readonly fields?

python - Django-registration - 一些激活

database - 在不重新启动服务器的情况下使 django 的设置缓存无效?

django - 在 Django 模型中存储多选结果的正确方法