[PYTHON] [Django memo] Je souhaite définir à l'avance les informations de l'utilisateur connecté dans le formulaire.

Chose que tu veux faire

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.

1. Préparez le modèle

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/

2. Préparez le formulaire.

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.

3. Définissez l'utilisateur de connexion dans la vue

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')
  1. Stockez les informations saisies par form = forms.PostForm (request.POST) dans formulaire.
  2. Vérifiez que les informations saisies avec ʻif form.is_valid (): 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.
  3. Dans post.author = request.user, spécifiez la request ʻuser` (c'est-à-dire l'utilisateur connecté) dans le champ auteur de la publication.
  4. Enregistrez le contenu saisi dans le formulaire avec post.save () et le nom d'utilisateur connecté.
  5. Spécifiez la destination de la redirection avec return redirect ('app: index').

Recommended Posts

[Django memo] Je souhaite définir à l'avance les informations de l'utilisateur connecté dans le formulaire.
Passer les informations de connexion à afficher dans Django
Définissez DateField du formulaire sur type = date dans Django
[Linux] Je souhaite connaître la date à laquelle l'utilisateur s'est connecté
Je souhaite utiliser Django Debug Toolbar dans les applications Ajax
Je veux corriger Datetime.now dans le test de Django
Je souhaite stocker les informations de la base de données dans la liste
Je veux afficher la progression en Python!
Je souhaite définir un cycle de vie dans la définition de tâche d'ECS
Je veux faire défiler la table de décalage Django, mais ...
Je veux écrire en Python! (3) Utiliser des simulacres
Je veux utiliser le jeu de données R avec python
Je souhaite envoyer un message d'erreur en japonais avec le formulaire de changement de mot de passe django
Comment mettre à jour les informations utilisateur sur Django RemoteUserMiddleware login
Je veux obtenir des informations sur le fonctionnement de Yahoo Route
[Django] Je souhaite me connecter automatiquement après une nouvelle inscription
Je n'arrive pas à me connecter à la page d'administration avec Django 3
Je veux rendre le type de dictionnaire dans la liste unique
Je veux aligner les nombres valides dans le tableau Numpy
Je ne voulais pas écrire la clé AWS dans le programme
Développement LINEbot, je souhaite vérifier le fonctionnement dans l'environnement local
Je veux faire de la deuxième ligne le nom de la colonne dans pandas
Je veux réussir le test G dans un mois Jour 1
Je veux connaître la population de chaque pays du monde.
Je veux épingler Spyder à la barre des tâches
Notez que vous souhaitez décorer manuellement les paramètres passés dans le formulaire du modèle Django élément par élément
Je veux sortir froidement sur la console
Je veux imprimer dans la notation d'inclusion
Je veux gérer la rime part1
Mémo d'enregistrement d'informations en utilisant la session dans Django
[Langage C] Je souhaite générer des nombres aléatoires dans la plage spécifiée
Je veux gérer la rime part3
Je veux convertir par lots le résultat de "chaîne de caractères" .split () en Python
Je veux expliquer en détail la classe abstraite (ABCmeta) de Python
Je souhaite trier une liste dans l'ordre des autres listes
Je veux utiliser quatre règles compliquées dans l'instruction IF du modèle Django! → Utilisez un modèle personnalisé
Je veux afficher la barre de progression
Je souhaite laisser une commande arbitraire dans l'historique des commandes de Shell
Je veux intégrer Matplotlib dans PySimpleGUI
Afficher les informations utilisateur, etc. dans le journal Django
Je veux gérer la rime part2
Je veux gérer la rime part5
Je veux gérer la rime part4
Je souhaite créer une API qui retourne un modèle avec une relation récursive dans Django REST Framework
Je veux visualiser où et combien de personnes se trouvent dans l'usine
Je souhaite utiliser Python dans l'environnement de pyenv + pipenv sous Windows 10
Je souhaite voir une liste de fichiers WebDAV dans le module Requêtes
Je souhaite stocker les résultats de% time, %% time, etc. dans un objet (variable)
Je veux obtenir le nom du fichier, le numéro de ligne et le nom de la fonction dans Python 3.4
django geodjango auquel j'ai fait référence quand je suis resté coincé dans le tutoriel (édition)
Je veux faire le test de Dunnett en Python
Je veux créer une fenêtre avec Python
Je veux gérer la rime part7 (BOW)
Je veux fusionner des dictionnaires imbriqués en Python
Je souhaite personnaliser l'apparence de zabbix
Je souhaite utiliser la fonction d'activation Mish
Je souhaite télécharger une application Django sur heroku
Je veux tracer les informations de localisation de GTFS Realtime sur Jupyter! (Avec ballon)
Je veux configurer un serveur fictif pour python-flask en quelques secondes en utilisant swagger-codegen.