使用 django.form 时获取保存的 django 用户

Get the django user in save while using django.form

我在使用 Django 表单时在 Django 中获取用户时遇到问题。我的代码看起来像这样。

观点:

@login_required
def something(request):
    item = ItemForm(request.POST)
    item.save(user=request.user)

形式:

class ItemForm(ModelForm):

    class Meta:
        model = Item
        fields = '__all__'

    def save(self, *args, **kwargs):
        user = kwargs['user'] 
        super(ItemForm, self).save(user=user)

模特

class Item(models.Model):
    field = models.CharField(max_length=100,)
    field2 = models.CharField(max_length=100,)

    def check_permissions(self, user):
        return user.groups.filter(name='group').exists()

    def save(self, *args, **kwargs):
        if self.check_permissions(kwargs['user']):
            super(Item, self).save()

我的问题是当我在 ItemForm 中调用默认保存时出现错误,因为用户参数是意外的。我需要模型中的用户进行权限检查,但我不知道如何获取它。

我终于解决了这个问题。我发现的方法是在没有用户的情况下保存表单,但将提交标志设置为 False,然后使用用户参数从模型中调用函数保存。

表单保存方法现在看起来像这样

def save(self, *args, **kwargs):
    item = super(ItemForm, self).save(commit=False)
    item.save(user=kwargs['user'])