如何使用django查询在clean函数中运行验证错误?
这是我的模型:如何使用django查询在clean函数中运行验证错误?,django,django-models,Django,Django Models,这是我的模型: class Stockdata(models.Model): company = models.ForeignKey(Company,on_delete=models.CASCADE,null=True,blank=True,related_name='Company_stock') quantity = models.PositiveIntegerField(null=True,blank=True,default=0) rate
class Stockdata(models.Model):
company = models.ForeignKey(Company,on_delete=models.CASCADE,null=True,blank=True,related_name='Company_stock')
quantity = models.PositiveIntegerField(null=True,blank=True,default=0)
rate = models.DecimalField(max_digits=10,decimal_places=2,default=0.00)
opening = models.DecimalField(max_digits=10,decimal_places=2,default=0.00)
stock_name = models.CharField(max_length=32)
我想让每个公司的股票名称
都是唯一的。
因此,我做了以下工作:
def clean(self):
if Stockdata.objects.filter(company=self.company,stock_name__iexact=self.stock_name).exists():
raise ValidationError({'stock_name':["This stock name already exists"]})
但是当我尝试save()
或submit
表单时,它会创建一个重复的值(即,它创建的值已经存在于同一公司中)
你知道怎么做吗
谢谢我的建议是改用a:
此外,从:
但是,请注意,与Model.full_clean()类似,在调用模型的save()方法时,不会调用模型的clean()方法
因此,您必须手动调用它。可以通过添加自定义mixin或具有如下功能的基类来“自动”实现:
def save(self, *args, **kwargs):
self.full_clean()
super().save(*args, **kwargs)
试试这个
def clean_stock_name(self):
stock_name = self.cleaned_data['stock_name']
if Stockdata.objects.filter(company=self.company,stock_name__iexact=stock_name).exists():
raise ValidationError({'stock_name':["This stock name already exists"]})
return stock_name
希望能有帮助
请参阅如果错误消息不是唯一的,如何引发错误消息。我想向用户显示错误消息。unique\u一起
将为您完成所有工作。如果您不想要它-请参阅代码示例和有关clean method的文档链接。我不明白您在何处以及如何接收404。实际上,它将我重定向到错误页面,并在调试设置为False
时向我发送错误
消息。我想以相同的形式显示验证错误
消息。什么是重定向unique_together
与重定向无关。请使用修改后的代码和错误消息文本更新您的问题。我现在收到此错误当错误参数包含多个字段的错误时,参数字段必须为无。
def clean_stock_name(self):
stock_name = self.cleaned_data['stock_name']
if Stockdata.objects.filter(company=self.company,stock_name__iexact=stock_name).exists():
raise ValidationError({'stock_name':["This stock name already exists"]})
return stock_name