Wenn Sie einen neuen Beitrag auf der Veröffentlichungsseite veröffentlichen, anstatt Ihren eigenen Namen einzugeben, möchten Sie die Informationen des angemeldeten Benutzers (z. B. Ihren Namen) im Voraus im Formular festlegen und sich die Mühe ersparen, Ihren Namen einzugeben.
app/models.py
from django.db import models
from django.contrib.auth import get_user_model
class Post(models.Model):
author = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
title = models.CharField(max_length=100)
content = models.TextField()
def __str__(self):
return self.title
Bereiten Sie ein Post-Modell vor und richten Sie drei Felder ein [Poster, Titel, Inhalt].
Das get_user_model ()
vonauthor = models.ForeignKey (get_user_model (), on_delete = models.CASCADE)
ruft die gesamte Klasse des aktuell angemeldeten Benutzers auf, und diese eine Zeile ruft das Feld author
und den angemeldeten Benutzer auf. Gebunden.
Es gibt verschiedene Möglichkeiten, auf das Benutzermodell zu verweisen, es ist jedoch nicht sinnvoll, direkt auf das Benutzermodell zu verweisen.
Referenz: https://djangobrothers.com/blogs/referencing_the_user_model/
app/forms.py
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta():
model = Post
fields = (
'title',
'content',
)
Dieses Mal habe ich ein Modellformular verwendet. Erstellen Sie eine PostForm-Klasse, indem Sie ModelForm erben, das in forms.py von Django enthalten ist. Geben Sie das zu vererbende Modell mit "model = Post" an und geben Sie zwei Felder außer "author" an. Es ist nicht nötig, den Autor hier anzugeben.
app/views.py
from django.shortcuts import render, redirect
from .models import Post
from . import forms
def form_view(request):
if request.method == 'POST':
form = forms.PostForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.save()
return redirect('sns:index')
else:
form = forms.PostForm()
return render(request, 'sns/form_view.html', {'form': form})
In der Funktion form_view muss das Verhalten geändert werden, je nachdem, ob POST als Anforderung (if request.method == 'POST':
) oder GET (else:
) empfangen wird. Wenn beispielsweise die Schaltfläche "Neuer Beitrag" gedrückt wird und die Funktion form_view vom URL-Dispatcher aufgerufen wird, wird die Anforderung zu "GET", sodass der Vorgang des einfachen Anzeigens des Formulars wie unten gezeigt ausgeführt wird.
else:
form = forms.PostForm()
return render(request, 'app/form_view.html', {'form': form})
Wenn etwas in das angezeigte Formular eingegeben wird, die Senden-Schaltfläche gedrückt wird und die Funktion form_view vom URL-Dispatcher aufgerufen wird, wird die Anforderung zu 'POST', sodass der unten gezeigte Code ausgeführt wird.
if request.method == 'POST':
form = forms.PostForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.save()
return redirect('app:index')
form = forms.PostForm (request.POST)
eingegebenen Informationen im Formular.commit = False
und teilen Sie mit, dass es vor dem vollständigen Speichern etwas mehr geändert wird.Recommended Posts