Python Django Access外键表';InlineFormset_工厂中的s数据
我正在使用Formset创建反馈页面,但无法访问django模板中的外键表值 我下面有一个反馈系统的模型 Models.pyPython 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
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>