我是Django的新手,我有一个有两个字段的表单: 客户名称&账单号码。 我创建了一个验证器,用于测试数据库表中是否已存在账单号(称为账单)。 但是现在我需要将此验证器转换为另一个测试,除了之前的测试之外,如果客户端名称存在于同一个表行中(更多的是smiply:如果客户端名称和bille号具有相同的pk)。 验证器:
def validate_url(value):
try:
entry=facture_ventes.objects.get(numfac=value)
except ObjectDoesNotExist:
entry = None
if entry is not None:
factexist=facture_ventes.objects.all().filter(id=entry.id).count()
if factexist is not None:
raise ValidationError("Numéro de Facture déja saisi ! ")
形式:
class SubmitUrlForm(forms.Form):
numfacture=forms.CharField(label='Submit Form', validators=[validate_url])
这是数据库表:
https://i.stack.imgur.com/3xmpd.png
任何帮助请,因为我知道验证者不能返回一个值,所以我被困在这里。谢谢
答案 0 :(得分:1)
您可以尝试使用get_or_create()方法:
obj,created = MyModel.objects.get_or_create(first_name ='Angus',last_name ='Young') 这可能会回来:
obj
:数据库中的对象
created
:错误
obj
:新创建的对象
created
:正确
答案 1 :(得分:1)
这不是验证者的工作,而是表格的clean
方法。
def clean(self):
numfac = self.cleaned_data.get('numfacture')
try:
entry=facture_ventes.objects.get(numfac=numfac)
except ObjectDoesNotExist:
entry = None
if entry is not None:
factexist=facture_ventes.objects.all().filter(id=entry.id).count()
if factexist is not None:
raise forms.ValidationError("Numéro de Facture déja saisi ! ")
if entry.client_name == self.cleaned_data.get('client_name'): # or whatever
raise forms.ValidationError("Facture avec ce numéro et cliente existe déjà")