2017-07-12 2 views
1

Je suis nouveau python et Django et aux prises avec la question suivante:Comment puis-je obtenir le nom de l'utilisateur connecté à Django views.py

J'ai un utilisateur connecté qui complète un formulaire avec 2 champs (urlA et urlB). Ces 2 champs, ainsi que l'horodatage et le nom d'utilisateur de l'utilisateur doivent être stockés dans ma base de données PSQL.

Mon problème actuel est que les champs urlA et urlB sont poussés dans la base de données, mais le nom d'utilisateur reste vide ou j'obtiens une erreur que self n'est pas définie.

J'ai essayé des variations follwoing à l'intérieur views.py:

forwardform.user = request.user.username 
User.objects.get(username=self.request.user) # -> gives error concering self 

views.py

def forwardthis(request): 
    forwardform = AddUrlForm(request.POST or None) 
    if request.method == 'POST' and forwardform.is_valid(): 

     forwardform.user = request.user.username 
     forwardform.save() 
    query_results = forwards.objects.all() 
    template = loader.get_template('forwardthis.html') 
    context = { 

     'forwardform': forwardform , 
     'query_results':query_results 
    } 

    #output = ', '.join([p.user for p in query_results]) 

    return HttpResponse(template.render(context,request)) 

models.py

class forwards(models.Model): 
    user = models.CharField(max_length = 150) 
    urlA = models.CharField(max_length = 254) 
    urlB = models.CharField(max_length = 254) 
    timestamp = models.DateTimeField('date created', auto_now_add=True) 

forms.py

class AddUrlForm(forms.ModelForm): 

    class Meta: 
     model = forwards 
     # fields = '__all__' 
     exclude = ["user"] 
+0

'User.objects.get (nom d'utilisateur = request.user.username)' – Ykh

Répondre

1

Enregistrer le formulaire avec commit=False, définissez le nom d'utilisateur, puis enregistrez l'instance.

if forwardform.is_valid(): 
    forward = forwardform.save(commit=False) 
    forward.user = request.user.username 
    forward.save() 

Notez que vous n'avez pas besoin de vérifier if request.methof == 'POST', puisque la forme est uniquement valable pour les demandes de poste. Pour obtenir des requêtes, le formulaire est non lié, donc invalide.

+0

Salut Alasdair, ça a! La seule chose que j'ai changé était la suivante: 'forward.user = request.user.username' afin de le faire fonctionner comme suggéré par Sumeet. merci pour votre aide – radzia2

+0

Bonne prise, corrigé maintenant. – Alasdair

-1

Cela devrait faire l'affaire

def forwardthis(request): 
    forwardform = AddUrlForm(request.POST or None) 
    if forwardform.is_valid(): 
     forwardform.save(commit=False) 
     forwardform.user = request.user.username 
     forwardform.save() 
    ... 
    ... 
    return HttpResponse(template.render(context,request)) 
+0

Cela n'a donc pas fonctionné car la sortie "request.user.username" n'a pas pu être enregistrée directement dans forwardform.user. J'ai dû utiliser une variable (ce que j'appelle une variable), afin de sauvegarder celle-ci. mais le 'forwardform.user' m'a fait penser à le changer en' forward.user' et ça a marché – radzia2