Как мы можем добиться пользовательской проверки в django представлениях на основе классов (создание и обновление представления) - PullRequest
0 голосов
/ 20 января 2020

Я хочу использовать проверку уникальности в представлениях на основе классов.

Здесь у меня есть createView, куда я хочу добавить проверку уникальности part_no во время публикации формы.

Как мы можем достичь this?

Любые решения.

Views.py

class SparePartsCreate(CreateView): 
    template = 'maint/spareparts_form.html'
    model = SpareParts
    fields = ['name', 'description', 'part_no']
    success_url = reverse_lazy('spare_parts')

    form.py
    class SparePartForm(forms.ModelForm):
        name = forms.CharField(required=True, label='Spare Part Name')
        description = forms.CharField(required=True, label='Spare Part Description')
        part_no = forms.CharField(required=True, label='Spare Part Number', max_length=6)
        class Meta:
            model = SpareParts
            fields = ['name','description','part_no']
        def __init__(self, *args, **kwargs):
            self.request = kwargs.pop('request', None)
            super(SparePartForm, self).__init__(*args, **kwargs)

Как мы реализуем проверку в представлениях на основе функций в form.py под чистым методом.

Для представлений на основе классов что-нибудь есть?

Ответы [ 2 ]

0 голосов
/ 20 января 2020
def clean_part_no(self):
    part_no = self.cleaned_data.get('part_no')
    qs = SpareParts.objects.filter(part_no=part_no)
    if qs.exists():
        raise forms.ValidationError('This part_no already taken, please use a different one.')
    return part_no

либо используйте этот способ в файле forms.py, либо укажите его как unique=True в файле models.py

0 голосов
/ 20 января 2020
class SparePartForm(forms.ModelForm):
        name = forms.CharField(required=True, label='Spare Part Name')
        description = forms.CharField(required=True, label='Spare Part Description')
        part_no = forms.CharField(required=True, label='Spare Part Number', max_length=6)
        class Meta:
            model = SpareParts
            fields = ['name','description','part_no']
        def __init__(self, *args, **kwargs):
            self.request = kwargs.pop('request', None)
            super(SparePartForm, self).__init__(*args, **kwargs)

       def clean_part_no(self, value):
          """ here you can validate the data  """
          if True:
             return value
          else:
             raise forms.validationError("error message ")
...