2016-06-03 5 views
0

Мне было интересно, как лучше всего создать модель и с помощью автоматического заполнения поля request.user.Django пользователь с автоматическим заполнением в 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'] 

Идея заключается в том, когда вы создаете матч, вы, как пользователь автоматически присоединиться этот матч.

+2

Возможный дубликат [Как установить ForeignKey в CreateView] (http://stackoverflow.com/questions/10382838/how-to-set-foreignkey-in-createview) , Это также описано в [документации] (https://docs.djangoproject.com/en/1.9/topics/class-based-views/generic-editing/#models-and-request-user). – solarissmoke

+0

@solarissmoke Спасибо! я искал неправильную часть документов. – Hobbs

ответ

0

Мой питон может быть ржавым, его прошло более года с тех пор, как я работал с Django.

Как уже упоминалось в комментариях Даниэля Розмана, объект request уже доступен в качестве члена класса вида.

Вам нужно всего лишь захватить пользователя из request и передать его в созданный instance, прежде чем он будет сохранен. Это может быть сделано в form_valid():

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

. Представления на основе классов уже присваивают запрос 'self.request', нет необходимости делать это явно в сообщении. –

+0

ужасно, я забыл ... Thx –

Смежные вопросы