TypeError save() 至少需要 2 个参数(给定 1 个)

TypeError save() takes at least 2 arguments (1 given)

我在 Django 项目中遇到类似 Type Error save() takes at least 2 arguments (1 given) 的错误。

view.py 文件

class DealsForm(ModelForm):
    class Meta:
        model = Product
        fields = ['title','description','category','price','sale_price','slug','active','update_defaults','user']
        exclude = ('user',)

model.py 文件

class Product(models.Model):
    title = models.CharField(max_length=120)
    description = models.TextField(null=True, blank=True,max_length=200)
    category = models.ManyToManyField(Category, null=True, blank=True)
    price = models.DecimalField(decimal_places=2, max_digits=100, default=29.99)
    sale_price = models.DecimalField(decimal_places=2, max_digits=100,\
                                            null=True, blank=True)
    slug = models.SlugField(unique=True)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)
    active = models.BooleanField(default=True)
    update_defaults = models.BooleanField(default=False)
    user = models.ForeignKey(User)   

    def __unicode__(self):
        return self.title

    class Meta:
        unique_together = ('title', 'slug')

    def get_price(self):
        return self.price

    def get_absolute_url(self):
        return reverse("single_product", kwargs={"slug": self.slug})

    def save(self, request, *args, **kwargs):
        obj = super(DealsForm, self).save(commit=False, *args, **kwargs)
        obj.user = request.user 
        obj.save() 

你能解决这个问题吗?

您在调用 .save() 时似乎没有传递 request 对象。您还需要根据 save() 的定义传递 request 对象。

此外,请检查您的 .save() 函数,因为您在 Product 模型 class 中使用 DealsForm class 参数调用 super() .

编辑:

因为您只想在 product 对象上设置 user,您可以改为执行以下操作:

def my_view(request):
    ...
    product = my_deals_form.save(commit=False) # get the product instance
    product.user = request.user # set the user on the product
    product.save() # save the object     

您不需要覆盖 save() 方法。只需使用 commit=False 参数调用模型表单实例,将用户设置为 product 对象,然后保存对象。