#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 Я не понимаю вашего вопроса. Форма используется в представлении, поэтому проверка выполняется в представлении. Или о чем вы спрашиваете?