0
votes

Comment mettre le nom d'utilisateur de l'utilisateur connecté dans la base de données à chaque fois qu'un formulaire est soumis

J'ai une application dans laquelle un utilisateur peut soumettre un formulaire qui passe dans la base de données (Postgres).

Je souhaite pouvoir envoyer automatiquement le nom d'utilisateur de l'utilisateur connecté à la même base de données, donc je peux garder trace de qui soumet. (Je ne veux pas mettre une ligne de forme avec le nom d'utilisateur, je veux que cela soit traité dans l'arrière-plan).

Ce que j'ai réussi à faire est d'obtenir l'identifiant utilisateur, mais il reste NULL, et je ne sais pas comment obtenir le nom d'utilisateur dans la base de données et le compléter à chaque soumission.

J'espère que je suis clair,

Mux Thanls.

Voici mon code

modèles.py xxx

formulaires.py xxx

vues.py xxx


3 commentaires

Essayez ceci: demande.user au lieu de cela, car vous essayez de définir le champ utilisateur du formulaire afin que cela soit supposé être un utilisateur (demande.user)


Cela ne serait pas "rester nul". Cela causerait un TypeError car nom d'utilisateur n'est pas appelable. De plus, vous n'avez pas réellement enregistré le nouvel objet à la base de données.


Merci Daniel, je voudrais en fait avoir le nom d'utilisateur affiché dans la base de données. Au lieu de cela, je reçois l'user_id. Comment suggéreriez-vous que je fais cela? (Merci que j'ai maintenant enregistré le formulaire)


3 Réponses :


1
votes

Essayez de mettre à jour votre vue comme si: xxx

(commit = false) Utilisez pour créer l'instance de modèle sans vous soumettre à la base de données, puis affectez l'utilisateur actuel à Votre nouvelle instance de modèle fertidb.user = demande.user puis appelez .Save () pour valider vos données à la base de données


BTW, MapBox_Access_Token Supposons à rester à l'intérieur Params.py Si vous souhaitez le charger à partir de la variable d'environnement lors de la déploiement de la production. Comme:

paramètres.py xxx

vues.py < Pré> xxx

espère que cela aide!


0 commentaires

0
votes

Il y a deux problèmes ici:

1. Dans votre modèle, vous voulez un utilisateur , mais dans votre formulaire, vous l'attribuez au nom nom d'utilisateur , lequel je pense est une chaîne.

user = db_models.manytomanyfield (utilisateur, on_delete = modèles.cascade)

et

o_form.user = demande.user.user ()

Il suffit de changer la deuxième ligne en o_form.user = demande.user .

2. De toute façon, vous ne sauvegez pas l'utilisateur.

Vous devez enregistrer votre modèle à nouveau après avoir affecté l'utilisateur.


0 commentaires

0
votes

merci pour les gars de l'aide.

@Tatan Quoc Ho Merci j'ai fait les modifications mais j'ai toujours un problème. La base de données affiche l'user_id, mais j'aimerais qu'il affiche le nom d'utilisateur.

Je suppose que mon problème est dans le fichier de modèle. Comment puis-je modifier ce qui suit, donc je reçois le nom d'utilisateur dans la base de données.

user = deb_models.forignkey (utilisateur, on_delete) modèles.Cascade) met l'utilisateur_id -> J'aimerais avoir le nom d'utilisateur. Comment puis-je l'appeler?

modèles.py xxx


0 commentaires