【问题标题】:Django auto-populate user in CreateviewDjango 在 Createview 中自动填充用户
【发布时间】:2016-06-03 06:22:30
【问题描述】:

我想知道创建模型并让 request.user 自动填充字段的最佳方法。

模型.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']

这个想法是,当您创建匹配时,您作为用户会自动加入该匹配。

【问题讨论】:

标签: django


【解决方案1】:

我的 python 可能生锈了,我使用 Django 已经一年多了。

正如 Daniel Roseman 在下面的 cmets 中所提到的,request 对象已经作为视图类的成员可用。

您只需从request 中获取用户并将其输入到创建的instance 中,然后保存。这可以在form_valid() 中完成:

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

【讨论】:

  • 基于类的视图已经将请求分配给self.request,无需在帖子中明确执行。
  • 太棒了,我忘了...谢谢
  • 但是如何调用 match_name 或内部 form_valid(form) 函数?
  • 应该在form.instance.match_name;但现在是四年前我和 Django 一起工作的 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-22
相关资源
最近更新 更多