首页 > 解决方案 > 在 Django 表单中,formset_factory 中是否有 initial={'authuser':request.user} 的等价物?

问题描述

[问题的简短版本]
所以到目前为止我一直在使用普通形式。在这种情况下,我使用
form = myForm(initial={'authuser':request.user})代码来区分用户和其他用户,并让他/她填写自己的表单。(显然,我有authuserUser 模型的外键)。

但是后来我尝试使用inlineformset_factory这个时间,但无法弄清楚如何使用普通表格完成我所做的事情。对此有何建议?非常感谢。


[问题的加长版]
所以我有以下模型。

class Question(models.Model):
    questionNumber = models.IntegerField(primary_key=True)
    title = models.CharField(max_length=20, default="")
    question = models.CharField(max_length=100, default="")

    def __str__(self):
        return self.questionNumber

class Answer(models.Model):
    authuser = models.ForeignKey(User, on_delete=models.CASCADE, null=True, default=None)
    questionTitle = models.ForeignKey(Question, on_delete=models.CASCADE, null=True, default=None)
    answer = models.CharField(max_length=500)
    dateAnswered = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.questionTitle

我想做的是让用户回答每个问题。但在这里我尝试使用inlineformset_factory,因为我想让用户随着时间的推移添加他们的答案。所以我相信我将不得不Question用作父模型和Answer子模型。

然而问题是,我如何让每个用户填写他/她自己的答案表?在正常形式中,我曾经form = myForm(initial={'authuser':request.user})获得request.user's 自己的形式。但我无法弄清楚formset_factory

我非常感谢您的帮助。谢谢。

+++
所以这是我的views.py。我已经initial= ...按照文档中的说明设置了该部分,但它似乎不起作用。无论我登录哪个帐户,我都会得到相同的表单集,其中保存了所有以前的数据。

def index(request): 
    today = datetime.today()

    AnswerFormSet = modelformset_factory(Answer, form=AnswerForm, extra=1)
    formset = AnswerFormSet(initial=[
        {
            'authuser':request.user
            }
        ])
        if request.method == "POST":
        formset = AnswerFormSet(request.POST)
        if formset.is_valid():
            formset.save()
            
            return redirect('index')


    return render(request, 'formset/index.html', {'formset':formset})

还有我的模板。

<body>
    <div class="row justify-content-center">
        <div class="col col-10">
            <div class="row justify-content-center">
                <div class="col col-12">
                    <form method="POST">
                        {% csrf_token %}
                        {{formset.as_p}}
                        <input type="submit">
                    </form>
                </div>
            </div>
        </div>
    </div>

</body>

标签: django

解决方案


推荐阅读