Python Django Access外键表';InlineFormset_工厂中的s数据

Python Django Access外键表';InlineFormset_工厂中的s数据,python,django,django-models,django-forms,django-templates,Python,Django,Django Models,Django Forms,Django Templates,我正在使用Formset创建反馈页面,但无法访问django模板中的外键表值 我下面有一个反馈系统的模型 Models.py class FeedbackForm(amdl.AagamBaseModel): feedback_form_id = models.AutoField(primary_key=True) subject_teacher = models.ForeignKey(MapMySchoolUserSubject, models.DO_NOTHING) f

我正在使用Formset创建反馈页面,但无法访问django模板中的外键表值

我下面有一个反馈系统的模型

Models.py

class FeedbackForm(amdl.AagamBaseModel):
    feedback_form_id = models.AutoField(primary_key=True)
    subject_teacher = models.ForeignKey(MapMySchoolUserSubject, models.DO_NOTHING)
    feedback_form_date = models.DateField()
    feedback_form_status = models.BooleanField()

    class Meta:
        db_table = 'feedback_form'

class FeedbackFormQuestion(amdl.AagamBaseModel):
    feedback_form_question_id = models.AutoField(primary_key=True)
    feedback_form = models.ForeignKey('FeedbackForm', models.DO_NOTHING)
    feedback_question = models.ForeignKey('FeedbackQuestion', models.DO_NOTHING)

    class Meta:
        db_table = 'feedback_form_question'

class Feedback(amdl.AagamBaseModel):
    feedback_id = models.AutoField(primary_key=True)
    feedback_form_question = models.ForeignKey('FeedbackFormQuestion', models.DO_NOTHING)
    map_myschool_user_standard_section = models.ForeignKey(MapMySchoolUserStandardSection, models.DO_NOTHING)
    feedback_rating = models.IntegerField()
    feedback_comments = models.TextField(blank=True, null=True)
    feedback_date = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = 'feedback'

class FeedbackQuestion(amdl.AagamBaseModel):
    feedback_question_id = models.AutoField(primary_key=True)
    question_text = models.TextField()
    feedback_question_credit = models.IntegerField()
    question_group = models.ForeignKey('FeedbackQuestionGroup', models.DO_NOTHING)

    class Meta:
        db_table = 'feedback_question'

class FeedbackQuestionGroup(amdl.AagamBaseModel):
    feedback_question_group_id = models.AutoField(primary_key=True)
    question_group = models.TextField()
    description = models.TextField()

    class Meta:
        db_table = 'feedback_question_group'

反馈
模型是学生对反馈进行评分的主要模型。由于评分是针对每个问题的,因此每个问题有一行是外键,带有
FeedbackFormQuestion
,这是构成反馈表单的
FeedbackForm
FeedbackQuestion
之间的关系(多对多)。其他模型仅用于分析和图表

这是一个视图,其中有一个模型的表单集,它基于管理html中外观的
表单(显示为bafter view.py)。处理多个带有MySchoolUSer数据的表单时,所有表单都需要相同的表单集。
View.py

form.py

from django import forms
from django.forms import ModelForm
from StudentFeedback import models


class FormFeedback(ModelForm):
    CHOICES = [(1, ''),
               (2, ''),
               (3, ''),
               (4, ''),
               (5, '')]
    feedback_rating = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect(), label=False, label_suffix=False)

    class Meta:
        model = models.Feedback
        fields = ['feedback_form_question', 'feedback_rating', 'feedback_comments']

这是html,但我无法访问此数据表单外键表 .html


{%csrf_令牌%}
{{formset.management_form}
{formset%中表单的%s}
//想要访问下面的问题文本,但该文本为空。
{{form.feedback\u form\u question.feedback\u question.question\u text}
{%用于form.feedback_rating%}
{{rating}}
{%endfor%}
{{form.feedback_comments}}
{%endfor%}
输出

预期产量


我已经多次使用过这样的访问外键数据,但不确定它为什么不出现在这里。

因为您不想让用户选择问题,只需在表单上禁用字段即可:

类表单反馈(ModelForm):
选项=[(1',),
(2, ''),
(3, ''),
(4, ''),
(5, '')]
反馈\评级=forms.ChoiceField(选项=选项,小部件=forms.RadioSelect(),标签=假,标签\后缀=假)
反馈形式问题=forms.modelcoocefield(
queryset=FeedbackFormQuestion.objects.all(),
disabled=真,
)
类元:
模型=模型。反馈
字段=[“反馈形式问题”、“反馈评分”、“反馈意见”]
现在在你的表单中,不要写
{{form.feedback\u form\u question.feedback\u question.question\u text}
,它实际上没有
表单的意义。feedback\u form\u question
是一个表单字段而不是为该字段存储的值。相反,从现在起,我们只是将字段设置为禁用状态,然后继续渲染该字段(即使用户篡改了html,表单也不会获取该字段)。此外,无论何时处理表单,都应始终记住渲染隐藏字段,尤其是在添加了几个重要隐藏字段的表单集的情况下:

<form method="POST">
  {% csrf_token %}
    {{ formset.management_form }}
    {% for form in formset %}
        <!-- Render the hidden fields -->
        {% for field in form.hidden_fields %}
            {{ field }}
        {% endfor %}
        <!-- Render the field -->
        {{ form.feedback_form_question }}
        {% for rating in form.feedback_rating %}
            {{ rating }}
        {% endfor %}
        {{ form.feedback_comments }}
    {% endfor %}
    <input type="submit" class="btn btn-primary col-sm-12" data-toggle="button" aria-pressed="false">
</form>

我不知道,如果我真的得到了你的错误,但是用OneToOneField试试:Django中有多种类型的外键:-OneToOneField-OnetoManyField-ForeignField@Henrik在html页面中,我无法用这个
{form.feedback\form\u question.feedback\u question.question\u text}
获得外键值。我需要问题文本字段的值。如果要呈现该字段,为什么不编写
{{form.feedback\u form\u question}}
?或者你不想让用户选择,只想显示问题的目的?@AbdulAzizBarkat我只想显示问题。用户只需给出评级和评论。用户无法编辑或更改question@AbdulAzizBarkat我发现
form.instance
不起作用。是否因为提供给表单的初始值不是模型实例,而是一些非模型实例值的dict()
initial=[{'feedback\u form\u question':4},{'feedback\u form\u question':4}]
。我应该试一试吗?也谢谢你的帮助。这一天也有两次。我仍然得到这个
{{form.instance.feedback\u form\u question.feedback\u question.question\u text}
栏空白。@AagamSheth尝试
{form.instance.feedback\u form\u question}
。那给了你什么?不那也不是working@AagamSheth移除隐藏的输入部分,然后简单地渲染字段。检查我的编辑。您应该定义
FeedbackFormQuestion
\uuu str\uuu
方法,以返回要显示的适当表示。
<form method="POST">
  {% csrf_token %}
    {{ formset.management_form }}
    {% for form in formset %}
        // Want to access the question_text below but it is blank.
        {{ form.feedback_form_question.feedback_question.question_text }}
        {% for rating in form.feedback_rating %}
            {{ rating }}
        {% endfor %}
        {{ form.feedback_comments }}
    {% endfor %}
    <input type="submit" class="btn btn-primary col-sm-12" data-toggle="button" aria-pressed="false">
</form>
<form method="POST">
  {% csrf_token %}
    {{ formset.management_form }}
    {% for form in formset %}
        <!-- Render the hidden fields -->
        {% for field in form.hidden_fields %}
            {{ field }}
        {% endfor %}
        <!-- Render the field -->
        {{ form.feedback_form_question }}
        {% for rating in form.feedback_rating %}
            {{ rating }}
        {% endfor %}
        {{ form.feedback_comments }}
    {% endfor %}
    <input type="submit" class="btn btn-primary col-sm-12" data-toggle="button" aria-pressed="false">
</form>