Question

J'ai un modèle de question avec un champ appelé ID utilisateur . Avant de poser une question, il est nécessaire de se connecter. Je souhaite, lors de la sauvegarde, capturer l'ID utilisateur de l'utilisateur actuellement connecté et l'attribuer à l'utilisateur du modèle Question.

Veuillez noter que je ne montre pas l'identifiant de l'utilisateur sur mon formulaire, c'est-à-dire que, dans le modèle Question, j'ai déclaré l'identifiant de l'utilisateur comme suit:

Question de classe (models.Model):     ...    userid = models.ForeignKey (User, editable = false)    ...

Comment puis-je attribuer un ID utilisateur connecté au modèle de question ID utilisateur ?

Était-ce utile?

La solution

Votre code peut ressembler à ceci:

from django.contrib.auth.decorators import login_required

class QuestionForm(forms.ModelForm):
    class Meta:
         model = Question

@login_required
def ask(request):
    form = QuestionForm(request.POST)

    if form.is_valid():
        question = form.save(False)
        question.userid = request.user
        question.save()

    #...

Autres conseils

Ce blog entrée (par James Bennett) Cela pourrait également vous être utile… il propose un moyen de faire presque exactement ce dont vous avez besoin.

Pour une ressource plus récente - et susceptible d'être mise à jour -, je recommande la documentation officielle de Django. Cet exemple même a été introduit dans la section relative aux méthodes ModelAdmin de la documentation de l'administrateur: https://docs.djangoproject.com/en/1.6/ ref / contrib / admin / # modeladmin-method

Si vous êtes comme moi, vous serez tenté de saisir cet exemple et de courir, mais vous pourriez tirer avantage d'un ralentissement, prendre quelques minutes pour lire, puis pour mettre en œuvre - j'aurais certainement ...

Notez que j'ai pointé vers 1.6, mais dans le coin inférieur droit de la page se trouve un sélecteur dynamique qui vous permet de choisir votre version. (Ces documents géniaux sont ce qui me pousse à Django depuis Rails!)

Une chose à garder à l'esprit est le fait que vous ne pouvez pas accéder à l'objet de requête (et donc à l'utilisateur actuel) à partir de vos modèles sans pirater les contraintes de conception de django.

Par conséquent, des astuces telles que le remplissage automatique de champs tels que created_by et updated_by ne fonctionnent pas avec Django. Vous devez définir ces champs manuellement dans vos vues, comme illustré par @Daevaorn.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top