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
对象,然后保存对象。
我在 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
对象,然后保存对象。