2016-06-03 23 views
0

Ich fragte mich, über die beste Möglichkeit, ein Modell zu erstellen und mit der request.user automatisch füllen ein Feld.Django automatisch Benutzer in Createview

model.py

class Match(models.Model): 
    match_name = models.CharField(max_length=100) 
    player = models.CharField(max_length=100, choices=match_game, default=2) 
    time_start = models.DateTimeField(blank=True, default=None, null=True) 
    match_join = models.ForeignKey(User, default=None, blank=True, null=True) 
    match_finished = models.BooleanField(default=False) 

    def get_absolute_url(self): 
     return reverse('match:details', kwargs={'pk': self.pk}) 

    def __str__(self): 
     return self.match_name 

views.py

class MatchCreate(CreateView): 
    model = Match 
    fields = ['match_name', 'player'] 

Die Idee ist, wenn Sie ein Spiel zu erstellen, Sie als Benutzer automatisch das Match beitreten.

+2

Mögliche Duplikat [? Wie stellt man ForeignKey in Create] (http://stackoverflow.com/questions/10382838/how-to-set-foreignkey-in-createview) . Es wird auch in der [Dokumentation] behandelt (https://docs.djangoproject.com/en/1.9/topics/class-based-views/generic-editing/#models-and-request-user). – solarissmoke

+0

@solarissmoke Danke! Ich habe in den falschen Teil der Dokumentation gesucht – Hobbs

Antwort

0

Meine Python könnte rostig sein, es ist mehr als ein Jahr her, seit ich mit Django gearbeitet habe.

Wie bereits in den Kommentaren von Daniel Roseman erwähnt, ist das Objekt request bereits als Mitglied der View-Klasse verfügbar.

Sie müssen nur den Benutzer aus dem request greifen und diesen in das erstellte instance einspeisen, bevor es gespeichert wird. Dies könnte in form_valid() erfolgen:

def form_valid(form): 
    form.instance.match_join = self.request.user 
    super(MatchCreate, self).form_valid(form) 
+0

Klassenbasierte Ansichten weisen die Anfrage bereits 'self.request' zu, es ist nicht nötig, dies explizit im Post zu tun. –

+0

genial, ich habe vergessen ... Thx –

Verwandte Themen