【发布时间】:2017-11-09 08:45:48
【问题描述】:
在我的 Django 项目中,我有以下模型:
models.py
class Paper(models.Model):
title = models.CharField(max_length=500)
description = models.CharField(max_length=1500)
chapter_1 = models.CharField(max_length=50, default='Intro')
chapter_1_status = models.CharField(max_length=3, choices=[('On','On'), ('Off','Off')], blank=True, null=True)
chapter_1_description = models.CharField(max_length=1500)
chapter_1_word_count = models.IntegerField()
chapter_1_reading_time = models.DurationField(blank=True, null=True)
chapter_2 = models.CharField(max_length=50, default='Hypothesis')
chapter_2_status = models.CharField(max_length=3, choices=[('On','On'), ('Off','Off')], blank=True, null=True)
chapter_2_description = models.CharField(max_length=1500)
chapter_2_word_count = models.IntegerField()
chapter_2_reading_time = models.DurationField(blank=True, null=True)
如您所见,除了标题和描述之外,所有其他字段都是重复的(第 1 章、第 2 章、第 3 章等等,直到第 9 章,这是指定论文的最大值)。
我正在使用字段状态来检查该章节是否会实际包含在论文中。如果有人选择关闭,则该章将不会显示在论文中。
我现在需要将这个概念转化为更高级的东西:我希望有一个用户可以看到的表单,而不是这个模型的常规 Django 表单:
- 标题
- 说明
- 可用章节列表(介绍、假设...),当他们单击特定章节时,他们希望包含与该章节相关的所有字段。所有没有被选中或点击的章节都应该被视为状态为关闭,因此它们不应该显示。
现在,我的 forms.py 看起来像这样:
class PaperFormClass(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(PaperFormClass, self).__init__(*args, **kwargs)
for field in iter(self.fields):
self.fields[field].widget.attrs.update({
'class': 'form-control form-control-lg'
})
class Meta:
model = Paper
fields = '__all__'
class PaperForm(forms.ModelForm):
class Meta:
model = Paper
fields = '__all__'
如何实现一个表单,而不是显示模型中的每个字段,只显示标题、描述和可包含在论文中的所有章节的可点击列表?单击一章后,与该章相关的其他字段应出现并可编辑。
非常感谢您提出的任何建议。
【问题讨论】:
标签: django django-models django-forms django-templates