Lorsque vous publiez un nouveau message sur le site de publication, au lieu de taper votre propre nom, vous souhaitez définir à l'avance les informations de l'utilisateur connecté (comme votre nom) dans le formulaire et éviter de taper votre nom.
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
Préparez un modèle de publication et configurez trois champs [Affiche, Titre, Contenu].
ʻAuthor = models.ForeignKey (get_user_model (), on_delete = models.CASCADE) get_user_model ()
appelle la classe entière de l'utilisateur actuellement connecté, et cette ligne appelle le champ ʻauthor` et l'utilisateur connecté. Est lié.
Il existe plusieurs façons de faire référence au modèle utilisateur, mais il n'est pas bon de se référer directement au modèle utilisateur.
Référence: 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',
)
Cette fois, j'ai utilisé un formulaire modèle. Créez une classe PostForm en héritant de ModelForm inclus dans forms.py fourni par Django.
Spécifiez le modèle à hériter avec model = Post
, et spécifiez deux champs à l'exception de l'auteur. Il n'est pas nécessaire de se soucier de spécifier l'auteur ici.
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})
Dans la fonction form_view, il est nécessaire de changer le comportement selon que POST est reçu sous forme de requête (ʻif request.method == 'POST': ) ou GET (ʻelse:
). Par exemple, lorsque le bouton «New Post» est enfoncé et que la fonction form_view est appelée par le répartiteur d'URL, la requête devient «OBTENIR», donc le processus d'affichage simple du formulaire est exécuté comme indiqué ci-dessous.
else:
form = forms.PostForm()
return render(request, 'app/form_view.html', {'form': form})
Quand quelque chose est entré dans le formulaire affiché, le bouton d'envoi est enfoncé et la fonction form_view est appelée par le répartiteur d'URL, la demande devient «POST», le code ci-dessous est donc exécuté.
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)
dans formulaire.sont correctes, et enregistrez
form avec
post = form.save (commit = False) . À ce stade, définissez
commit = False` dans l'argument et dites qu'il sera modifié un peu plus avant de l'enregistrer complètement.post.author = request.user
, spécifiez la request
ʻuser` (c'est-à-dire l'utilisateur connecté) dans le champ auteur de la publication.post.save ()
et le nom d'utilisateur connecté.return redirect ('app: index')
.Recommended Posts