Django Validators:检查数据库

时间:2018-03-19 10:47:57

标签: django forms validation

我是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

任何帮助请,因为我知道验证者不能返回一个值,所以我被困在这里。谢谢

2 个答案:

答案 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à")