首页 > 解决方案 > Django将外键字段添加到generic.CreateView

问题描述

在此先感谢,我正在学习 django 并制作一个投票项目,我想要实现的是让用户创建一个问题 + 添加一些答案选项,所以我有一个基于问题类的视图和一个选项

class Question(models.Model):
    id = models.AutoField(
        primary_key=True)
    author = models.ForeignKey(
        settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    question_text = models.CharField("Question", max_length=200)
    pub_date = models.DateTimeField(
        "date de publication", default=timezone.now)
    popularity = models.IntegerField("popularité", default=0)

    def __str__(self):
        return self.question_text




class Choice(models.Model):
    question_lie = models.ForeignKey(
        Question, to_field="id", null=True, blank=True, on_delete=models.CASCADE)

    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

我的创建视图:

class CreatePoll(LoginRequiredMixin, generic.CreateView):
    model = Question
    fields = ["question_text"]
    template_name = "polls/create_poll.html"
    success_url = "/polls"

    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)

实际上,用户可以只提供一个没有答案的问题,在管理部分我设法这样做:

class ChoiceInLine(admin.TabularInline):
    model = Choice
    extra = 1

class QuestionAdmin(admin.ModelAdmin):
    ...

    inlines = [ChoiceInLine]

有没有类似的方法?谢谢阅读

编辑:我发现 django-extra-view 模仿了管理员的方式来做到这一点,但是有没有本地的方式来做到这一点?

标签: django

解决方案


可以使用inlineformset_factory实现和 Django admin 一样的效果


推荐阅读