W niestandardowym formularzu w jaki sposób można zweryfikować unikalność pola modelu (tzn. Ma on zestaw unique=True
)?Jak sprawdzić/wyczyścić() a unikalne = Prawdziwe pole bez użycia ModelForm?
wiem, że Django ModelForm automatycznie wykonuje validate_unique()
funkcji, która jest wywoływana wewnątrz clean()
metoda BaseModelForm jest - tak, przy użyciu ModelForm, to będzie prawidłowo obsługiwane (jak to jest w admin).
Jednak tworzę swój własny formularz od podstaw i zastanawiam się, jak sam mogę sobie z tym poradzić? Myślę, że moją największą przeszkodą jest wiedzieć, który obiekt jest dołączony do formularza, gdy dane jest czyszczona ...
Niektóre kodu:
class UserProfile(CreatedModifiedModel):
user = models.ForeignKey(User, unique=True)
display_name = models.CharField('Display Name',max_length=30,
blank=True,unique=True)
class EditUserProfileForm(forms.Form):
display_name = forms.CharField(required=False,max_length=30)
# "notifications" are created from a different model, not the UserProfile
notifications = forms.MultipleChoiceField(
label="Email Notifications",
required=False,
widget=forms.CheckboxSelectMultiple,)
def clean_display_name(self):
# how do I run my own validate_unique() on this form?
# how do I know which UserProfile object I am working with?
# more code follows, including the __init__ which sets up the notifications
Czy istnieje jakiś powód, dla którego tworzysz niestandardową formę zamiast ModelForm? – tghw
Zaktualizowałem kod, aby wyświetlał pole "powiadomienia", które jest potrzebne z innej aplikacji, ale obsługiwane na tym samym EditUserProfileForm ... mam nadzieję, że ma to sens. Nie sądzę, mogę zrobić ModelForm z wielu źródeł modelu ... – thornomad