Nachdem ich den Mechanismus des Frameworks gemäß Official Django document kennengelernt habe, möchte ich eine Funktion hinzufügen und versuchen, sie zu implementieren. Ich habe es gemacht.
・ In Djangos offiziellem Dokument können Sie Django berühren und lernen, während Sie eine einfache Abstimmungs-App von Grund auf neu erstellen.
・ Ich habe zum ersten Mal versucht, Django im offiziellen Dokument von Django zu berühren, aber ich hatte das Gefühl, dass die Erklärung für Anfänger nicht höflich war. Deshalb habe ich mitten in der Erstellung der Anwendung und [Udemys Django-Lehrmaterialien](https: /) aufgehört, in diesem Tutorial zu lernen Ich beschloss, die Grundlagen der Grundlagen unter /www.udemy.com/course/django-3app/) zu lernen (die, die ich auf Django gesucht und am besten verkauft habe).
・ Nachdem ich mit Udemys Unterrichtsmaterialien die Grundlagen von Django gelernt hatte, kehrte ich zum offiziellen Dokument zurück und schloss die Erstellung der Abstimmungs-App ab.
・ Python 3.8.2 ・ Django 3.0.3 ・ Das Betriebssystem ist sowohl Windows 10 als auch MacOS
Abstimmungs-Apps, die mit offizieller Dokumentation erstellt wurden, müssen den Administrator-Benutzerbildschirm verwenden, um Fragen und Auswahlmöglichkeiten hinzuzufügen. Ich möchte auch einen neuen Erstellungsbildschirm auf dem allgemeinen Benutzerbildschirm hinzufügen.
-Implementieren mit CreateView ・ Erstellen Sie auf der Seite mit der Fragenliste einen Link zur Seite zur Erstellung von Fragen · Erstellen Sie zuerst eine neue Frage in der Fragentabelle ・ Erstellen Sie anschließend eine neue Option, die mit der Frage verknüpft ist
[views.py]
polls/views.py
#Import weggelassen
#Kürzung
class QuestionCreate(CreateView):
#template_name = 'polls/createquestion.html'
model = Question
fields = ('question_text',)
success_url = reverse_lazy('polls:index')
class ChoiceCreate(CreateView):
model = Choice
fields = ('choice_text',)
success_url = reverse_lazy('polls:index')
def dispatch(self, request, *args, **kwargs):
self.question = get_object_or_404(Question, pk=kwargs['question_id'])
return super().dispatch(request, *args, **kwargs)
def form_valid(self, form):
form.instance.question = self.question
return super().form_valid(form)
(1) Der Grund, warum der Name der Vorlage nicht als "Vorlagenname = (beliebiger Bildschirmname) .html" (auskommentiert) beschrieben wurde, ist Wenn Sie den Bildschirmnamen auf "Modellname \ _form.html" setzen, werden CreateView und der Bildschirm automatisch verknüpft.
(2) Wenn in Feldern nur eine Spalte angegeben werden muss, ist nach dem Spaltennamen ein Komma (,) erforderlich.
③ Das Problem ist "Choice Create"
Was macht der Versand?
Überschreiben der vorhandenen View-Klassenmethode dispatch
.
Da die Auswahl mit der Frage verknüpft sein muss, wird question_id in "dispatch" angegeben.
Grundsätzlich wird davon ausgegangen, dass es viele Fälle gibt, in denen das Formular wie "def XXXX ():" in der Allzweckansicht (CreateView usw.) überschrieben wird. (Ich gebe den Einwand zu ...)
Wenn Sie interessiert sind, lesen Sie bitte die Definition der allgemeinen Ansicht.
[urls.py]
polls/urls.py
#Import weggelassen
app_name = 'polls'
urlpatterns = [
#Ausgelassen, da es mit dem offiziellen Dokument identisch ist
path('question_create/', views.QuestionCreate.as_view(),
name='questioncreate'),
path('<int:question_id>/choice_create/', views.ChoiceCreate.as_view(),
name='choicecreate'),
]
[models.py]
polls/models.py
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published', auto_now_add=True)
def __str__(self):
return self.question_text
Fügen Sie dem zweiten Argument von pub_date auto_now_add = True
hinzu.
[templates]
polls/templates/polls/index.html
{% if latest_question_list %}
<ul>
{% for question in latest_question_list %}
<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a>
{% endfor %}
</ul>
{% else %}
<p>No polls are available.</p>
{% endif %}
<a href="{% url 'polls:questioncreate' %}">New Question</a>
Fügen Sie in der letzten Zeile einen Link zum Bildschirm zur Erstellung neuer Fragen hinzu.
polls/templates/polls/question_form.html
<form method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Save">
</form>
polls/templates/polls/choice_form.html
<form method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Save">
</form>
Danke, dass du bis zum Ende zugesehen hast! Da dieser Artikel mein erster Beitrag zu Qiita war, gab es viele Dinge, die nicht funktionierten, aber ich hoffe, er hilft denen, die Probleme haben, ähnliche Funktionen hinzuzufügen. Ich habe lange gebraucht, um dies umzusetzen. .. ..
Grundsätzlich entspricht die Allzweckansicht einem Modell. Da diese App den beiden Tabellen neuen Inhalt hinzufügen muss, haben wir die Erstellung von Fragen und Auswahlmöglichkeiten separat implementiert.
Ich wollte unbedingt eine Frage und die zugehörigen Optionen auf einem Bildschirm erstellen, konnte sie jedoch mit meiner aktuellen Technologie nicht implementieren. Es wäre möglich gewesen, wenn die Fragen- und Auswahltabellen zusammengefügt worden wären, aber ...
Dieses Mal habe ich eine neue Erstellungsfunktion hinzugefügt, aber ich denke auch darüber nach, andere Bearbeitungs- / Löschfunktionen hinzuzufügen. Wenn ich es mir leisten kann, werde ich es auf Qiita veröffentlichen.
Wenn Sie Vorschläge oder Fragen haben, wenden Sie sich bitte an @ hiyoku0918!
Recommended Posts