Django验证器:检查数据库中的两个字段值是否具有相同的id
我是Django的新手,我的表单有两个字段: 客户名称和账单编号。 我创建了一个验证器,用于测试数据库表(称为bills)中是否已经存在票据编号。 但是现在我需要将这个验证器转换为另一个验证器,在前面的测试之外,如果客户机名称存在于同一个表行中(更简单:如果客户机名称和账单编号具有相同的pk)。 验证器:Django验证器:检查数据库中的两个字段值是否具有相同的id,django,forms,validation,Django,Forms,Validation,我是Django的新手,我的表单有两个字段: 客户名称和账单编号。 我创建了一个验证器,用于测试数据库表(称为bills)中是否已经存在票据编号。 但是现在我需要将这个验证器转换为另一个验证器,在前面的测试之外,如果客户机名称存在于同一个表行中(更简单:如果客户机名称和账单编号具有相同的pk)。 验证器: def validate_url(value): try: entry=facture_ventes.objects.get(numfac=value) exc
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])
以下是数据库表:
请帮忙,因为我知道验证器不能返回值,所以我被困在这里。谢谢您可以尝试使用get\u或\u create()方法: obj,created=MyModel.objects.get_或_create(first_name='Angus',last_name='Young') 这可能会返回:
- 如果存在:
obj
:数据库中的对象
已创建
:False
- 如果它不存在:
obj
:新创建的对象
created
:True这不是验证器的工作,而是表单的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à")
非常感谢你的回答。好的,我明白了,我会测试一下。我想clean方法应该在我的视图文件中?是吗?不,这是表单上的一个方法。非常感谢你帮了我一个忙。我有一个问题,如果我将第二个字段转换为ModelChoiceField,会有任何修改吗?先谢谢你