Ich bin ein Formular in Django basierend auf meinen Modellen erstellen. Ich habe dies in meinem views.py:Wie Formularaktion in Django funktioniert, wenn eine Klasse in views.py für die Formularerstellung verwendet
class GroupCreateView(CreateView):
model = Group
form_class = GroupForm
template_name = 'ipaswdb/group/group_form.html'
die Vorlage mit einigen netten Form CSS gut aussieht und ein Datepicker und dergleichen. Ich habe auch eine Form, damit ich Widgets in meinem forms.py hinzufügen
class GroupForm(forms.ModelForm):
notes=forms.CharField(widget = forms.Textarea)
billing_address = forms.ModelChoiceField(queryset=Address.objects.all(), widget=forms.Select(attrs={'tabindex':'5'}))
start_date = forms.DateField(widget=forms.TextInput(attrs=
{
'class':'datepicker',
'tabindex' : '5',
'placeholder' : 'Groups start date'
}))
class Meta:
model=Group
exclude = ['created_at', 'updated_at']
All dies macht Sinn für mich, kann ich sehen, wie die Form mein Modell aufgebaut ist, basiert weg und wird mit den Dingen bevölkert sagen im ModelChoiceField etc .. Ich bin mir einfach nicht sicher, wie das def some_method in meinem views.py ins Spiel kommt. Also in meiner Formularvorlage für die Formularaktion habe ich folgendes:
<h1> Add a new Group </h1>
<form action="." method="post">
{% csrf_token %}
<div class="col-2">
{{ form.group_name.errors }}
<label>
Group Name:
<input placeholder="Enter the groups name" id="id_group_name" name="group_name" tabindex="1">
</label>
</div>
<div class="col-2">
{{ form.group_contact.errors }}
<label>
Gorup Contact
<input placeholder="Enter the groups contact name" id="id_group_contact" name="group_contact" tabindex="2">
</label>
</div>
<div class="col-2">
{{ form.tin.errors }}
<label>
TIN Number
<input placeholder="Groups TIN#" id="id_tin" name="tin" tabindex="3">
</label>
</div>
<div class="col-2">
{{ form.npi.errors }}
<label>
NPI Number
<input placeholder="Groups NPI#" id="id_npi" name="npi" tabindex="4">
</label>
etc etc etc
Was ich denke, ruft einige Standardmethode in der Ansicht auf? Ich bin mir nur nicht sicher, was diese Methode ist. Dies ist auch für das Hinzufügen einer neuen Gruppe, ich vermute, brauche ich eine andere Ansicht oder etwas, um den Fall zu behandeln, wo sie eine bereits bestehende Gruppe bearbeiten? Diese Blog-Demo, die ich verwendet habe, hat alles in der sessions.py mit einem forms.py gemacht und dachte auch, dass es keine Klasse GroupCreateView (CreateView) gab: Esque-Methode in dem Beispiel, in dem ich in der views.py arbeitete, gab es das Verfahren (Beachten sie meine Methode nicht):
def post_detail(request, year, month, day, post):
post = get_object_or_404(Post, slug=post,
status='published',
publish__year=year,
publish__month=month,
publish__day=day)
comments = post.comments.filter(active=True)
#their form stuff
if request.method == 'POST':
comment_form = CommentForm(data=request.POST)
if comment_form.is_valid():
new_comment = comment_form.save(commit=False)
new_comment.post = post
new_comment.save()
else:
comment_form=CommentForm()
return render(request,
'blog/post/detail.html',
{'post': post, 'comments':comments, 'comment_form':comment_form})
Meine Frage ist (und ich kann mich nicht erinnern, was es beispielsweise zu zitieren), aber was ist das class GroupCreateView(CreateView):
wirklich tun und wie kann ich das Formular erhalten sie referenziert/zurück zu kommen, schafft um die richtige Aktion zu nennen, die mich schließlich validieren und in der Datenbank speichern lässt?
Auch eine zweite Art von Teil ist, wie könnte ich das (grob) erweitern, um den Fall zu behandeln, wo es eine neue Gruppe hinzufügt, und vielleicht auch einen anderen Fall, wo es einen bestehenden bearbeitet? (Ich stelle diese zweite Frage hier, weil ich sicher bin, dass es sich auf die Antwort von Anfang an bezieht).
Aus meiner urls.py
url(r'group/add/$', GroupCreateView.as_view(), name='group-add'),
Die Formularaktion hat nichts mit Django zu tun, es ist nur die URL, die das Formular übermittelt. '". "' ist eine Abkürzung, die "den aktuellen Pfad" bedeutet. –
Okay, also bedeutet das, dass ich eine Anweisung in meinem urls.py benötige, um anzugeben, welche Methode damit umgehen wird? – Codejoy
Nun ja, aber der Punkt ist, es ist die gleiche URL, die das Formular anzeigt und verarbeitet. –