繁体   English   中英

如何在 Django 的基于类的视图中将模型表单字段分配给当前登录的用户

[英]How to assign model form field to a current logged in user in Django's class based views

我正在尝试使用当前登录用户的用户名保存表单,但出现错误“无法分配“'Neshno_Games2'”:“League.host”必须是“经理”实例。” 发生

视图.py

class CreateLeaguesView(generic.CreateView):
    model = League
    template_name = "leagues/create-league.html"
    form_class = LeaguesCreationForm
    success_url = "/leagues/leagues"

    def get_context_data(self, **kwargs):
        context = super().get_context_data( **kwargs)
        context['leagues'] = League.objects.all()
        return context

    def form_valid(self, form):
        manager = self.request.user.username
        League.objects.create(
            host = manager,
        )
        return super(CreateLeaguesView, self).form_valid(form)

模型.py

class League(models.Model):
    name = models.CharField(max_length=30)
    no_players = models.IntegerField(default=20)
    start_date = models.DateField(blank=False, null=False)
    end_date = models.DateField(blank=False, null=False)
    prize = models.CharField(max_length=300)
    host = models.ForeignKey(Manager, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

表格.py

class LeaguesCreationForm(forms.ModelForm):
    class Meta:
        model = League
        fields = (
            "name",
            "no_players",
            "start_date",
            "end_date",
            "prize",
        )

你可以这样尝试:

class CreateLeaguesView(generic.CreateView):
    model = League

    def form_valid(self, form):
        form.instance.host= self.request.user.manager  # accessing one to one data
        return super().form_valid(form)

可以在本文档中找到更多信息: https ://docs.djangoproject.com/en/4.0/topics/db/examples/one_to_one/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM