Ich bin mir nicht sicher, warum das Hinzufügen von Widgets in meinem GroupForm-Formular in forms.py meine Validierungen dazu brachte, drunter und drüber zu gehen. Zuvor respektierten sie meine Modelle, jetzt nachdem sie widget attrs für alles hinzugefügt haben, respektiert sie nicht mehr die Modelle und sagt, dass für alles ein Feld benötigt wird. Gibt es einen anderen Gegenstand, den ich bei der Definition des Widgets vermisst habe?Validierung auf CreateView und UpdateView in Django wird immer ausgelöst, auch wenn Modell nicht funktioniert/sollte
forms.py:
class GroupForm(forms.ModelForm):
group_name = forms.CharField(widget = forms.TextInput(attrs={'tabindex':'1', 'placeholder':'Groups name'}))
group_contact = forms.CharField(widget = forms.TextInput(attrs={'tabindex':'2', 'placeholder':'Groups point of contact person'}))
tin = forms.CharField(widget = forms.TextInput(attrs={'tabindex':'3', 'placeholder':'Groups tin#'}))
npi = forms.CharField(widget = forms.TextInput(attrs={'tabindex':'4', 'placeholder':'Groups npi#'}))
notes = forms.CharField(widget = forms.Textarea(attrs={'tabindex':'5', 'placeholder':'Group notes'}))
#notes = forms.CharField(widget = forms.TextInput(attrs={'tabindex':'5', 'placeholder':'Groups notes'}))
billing_address = forms.ModelChoiceField(queryset=Address.objects.all(), widget=forms.Select(attrs={'tabindex':'6'}))
mailing_address = forms.ModelChoiceField(queryset=Address.objects.all(), widget=forms.Select(attrs={'tabindex':'7'}))
start_date = forms.DateField(widget=forms.TextInput(attrs=
{
'class':'datepicker',
'tabindex' : '8',
'placeholder' : 'Groups start date'
}))
end_date = forms.DateField(widget=forms.TextInput(attrs=
{
'class':'datepicker',
'tabindex' : '9',
'placeholder' : 'Groups term date'
}))
change_date = forms.DateField(widget=forms.TextInput(attrs=
{
'class':'datepicker',
'tabindex' : '10',
'placeholder' : 'Groups changed date'
}))
change_text = forms.CharField(widget = forms.TextInput(attrs={'tabindex':'11', 'placeholder':'Reason for date change'}))
#term_comment = forms.CharField(widget= forms.TextInput(attrs={'tabindex':'12', 'placeholder':'Note on group term'}))
term_comment = forms.CharField(widget = forms.Textarea(attrs={'tabindex':'12', 'placeholder':'Note on group term'}))
group_phone = forms.RegexField(regex=r'^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$',
error_message = ("Phone number must be entered in the format: '555-555-5555 or 5555555555'. Up to 15 digits allowed."),
widget = forms.TextInput(attrs={'tabindex':'13', 'placeholder': '555-555-5555 or 5555555555'}))
group_fax = forms.RegexField(regex=r'^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$',
error_message = ("Fax number must be entered in the format: '555-555-5555 or 5555555555'. Up to 15 digits allowed."),
widget = forms.TextInput(attrs={'tabindex':'15', 'placeholder': '555-555-5555 or 5555555555'}))
group_term = forms.ModelChoiceField(queryset=GroupTerm.objects.all(), widget=forms.Select(attrs={'tabindex':'16'}))
class Meta:
model=Group
exclude = ['created_at', 'updated_at']
views.py:
class GroupCreateView(CreateView):
model = Group
form_class = GroupForm
template_name = 'ipaswdb/group/group_form.html'
success_url = 'ipaswdb/group/'
def form_valid(self, form):
return super(GroupCreateView, self).form_valid(form)
class GroupUpdateView(UpdateView):
model = Group
form_class = GroupForm
template_name = 'ipaswdb/group/group_form.html'
success_url = 'ipaswdb/group/'
Gruppenmodell:
class Group(models.Model):
group_name = models.CharField(max_length=50)
group_contact= models.CharField(max_length=50)
tin = models.CharField(max_length=50)
npi =models.CharField(max_length=50)
notes = models.TextField(max_length = 255, null=True, blank=True)
billing_address = models.ForeignKey('Address', related_name = 'billing_address', on_delete=models.SET_NULL, null=True)
mailing_address = models.ForeignKey('Address', related_name = 'mailing_address', on_delete=models.SET_NULL, null=True, blank=True)
start_date = models.DateField(auto_now=False, auto_now_add=False, null=True, blank=True)
end_date = models.DateField(auto_now=False, auto_now_add=False, null=True, blank=True)
change_date = models.DateField(auto_now=False, auto_now_add=False, null=True, blank=True)
change_text = models.TextField(max_length = 255, null=True, blank=True)
term_comment = models.TextField(max_length = 255, null=True, blank=True)
group_phone=models.CharField(max_length=50)
group_fax = models.CharField(max_length=50)
group_term = models.ForeignKey(GroupTerm, on_delete=models.SET_NULL, null=True, blank=True) #quesiton is can a group be termed many times?
created_at=models.DateField(auto_now_add=True)
updated_at=models.DateField(auto_now=True)
#provider_location = models.ManyToManyField('ProviderLocations', through='GroupLocations')
def __str__(self):
return self.group_name
Dank dieser ist ziemlich gut funktioniert, obwohl ich nicht sicher bin, wie hier das Feld hinzufügen in das war der RegEx-Typ wie dieser: group_phone = forms.RegexField (regex = r '^ (\ + \ d {1,2} \ s)? \ (? \ d {3} \)? [\ s.- ]? \ d {3} [\ s .-]? \ d {4} $ ', error_message = ("Telefonnummer muss im Format:' 555-555-5555 oder 5555555555 'eingegeben werden. Bis zu 15 Ziffern erlaubt. "), widget = forms.TextInput (attrs = {'tabindex': '13', 'Platzhalter': '555-555-5555 oder 5555555555'})) – Codejoy
Sie können diese Felder explizit definieren, stellen Sie lediglich sicher, dass Ihre Validierung Ihr Modell respektiert. Sie können entweder 'RegexField' sein, wie Sie es haben, oder sie können' CharField' mit Validatoren sein. Es gibt ein Validator-Beispiel am unteren Ende des [überschreibenden Standardbereiches] (https://docs.djangoproject.com/en/1.9/topics/forms/modelforms/#overriding-the-default-fields), aber es ist nicht notwendig, Sie können sie jedoch wie gewünscht überschreiben. –
Das hat es geschafft, das funktioniert super danke! – Codejoy