Weil der Adventskalender leer ist ...
Formularbezogene APIs sind in Django relativ großzügig, aber wenn Sie versuchen, mehrere Modelle in einem Formular zu bearbeiten, wird dies plötzlich problematisch.
So kann ich die Dinge schnell erledigen, während ich das Modul benutze.
Es ist wie eine Fortsetzung des vorherigen Artikels.
pip install django-extra-views
Tun Sie dies, weil zusätzliche Django-Ansichten ohne Verwendung einer Formularklasse erreicht werden können.
CreateView
models.py
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=255)
age = models.IntegerField(default=25) #Ich möchte zurück zu 25 gehen
class Car(models.Model):
owner = models.ForeignKey(Person)
color = models.CharField(max_length=10)
views.py
views.py
from extra_views import CreateWithInlinesView, InlineFormSet
class CarInlineFormSet(InlineFormSet):
model = Car
fields = ("color", )
can_delete = False #In der Erstellungsansicht muss nicht gelöscht werden
class PersonCarCreateFormsetView(CreateWithInlinesView):
model = Person
fields = ("name", "age") # self.Modellfelder
inlines = [CarInlineFormSet, ]
template_name = "person_formset.html"
success_url = "/"
person_formset.html
{% extends "base.html" %}
{% block content %}
<form method="post">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
{#Inline wird in einer Variablen namens Inlines aufgelistet#}
<p>Car Color</p>
<table>
{% for form in inlines %}
{{ form.as_table }}
{% endfor %}
</table>
<button type="submit">save</button>
</form>
{% endblock %}
UpdateView
das Gleiche
views.py
views.py
from extra_views import InlineFormSet, UpdateWithInlinesView
class CarInlineFormSetCanDelete(InlineFormSet):
model = Car
fields = ("color", )
can_delete = True
class PersonCarUpdateFormsetView(UpdateWithInlinesView):
model = Person
fields = ("name", "age")
inlines = [CarInlineFormSetCanDelete, ]
template_name = "person_formset.html"
success_url = "/"
das Gleiche
Sehr angenehm.
Wenn Sie es normal schreiben, möchten Sie das Inline-Schreiben wie "table.name" schreiben.
Ich war ein bisschen süchtig danach
template.html
{% for inline in inlines %}
{% for line in inline %}
{{ line.name }}
{% endfor %}
{% endfor %}
Sie können eine Doppelschleife wie diese ausführen. Dies liegt wahrscheinlich daran, dass mehrere Inline-Modelle für "Inlines" festgelegt sind.
Nachtrag bis hierher
Recommended Posts