Уникальный аргумент Django CharField в новой версии Django

#python #django

#python #django

Вопрос:

В моем forms.py файл, который я использую CharField. Я читал об уникальном аргументе CharField в книге: в нем говорится, что если уникальный аргумент = True, то CharField этой модели не может повторяться. В книге представлена версия Django 2.1. На данный момент имя аргумента было изменено. Я так думаю, потому что Django показывает знак ошибки TypeError: __init__() got an unexpected keyword argument 'unique'

Комментарии:

1. Куда вы поместили unique ? в моделях? или формы?

2. Я имею в виду следующее: ‘username = CharField (unique = True)’

3. как вы это импортировали CharField ?

4. из django импортируйте формы forms. CharField()

5. формы oops, а не модели

Ответ №1:

Чтобы проверить уникальность формы, вы можете использовать clean_fieldname() методы forms для создания дополнительного запроса к БД перед сохранением формы.

 from django import forms
from django.core.exceptions import ValidationError

class MyForm(forms.Form):
    username = forms.CharField()

    def clean_username(self):
        if MyModel.objects.filter(username=self.cleaned_data['username'])
                .exists():
            raise ValidatioError('already exists')
  

Или, если это должно быть ModelForm :

 from django import forms
from django.core.exceptions import ValidationError
from .models import MyModel
 
class MyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = ['username', ]

    def clean_username(self):
        if self._meta.model.objects
                .filter(username=self.cleaned_data['username'])
                .exists():
            raise ValidatioError('already exists')
  

Комментарии:

1. но как я могу проверить представления?

2. @someseeapeniseeaharpoon Я не понимаю вашего вопроса. Форма используется в представлении, поэтому проверка выполняется в представлении. Или о чем вы спрашиваете?