在我的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__'
如何实现一个表单,而不是显示模型中的每个字段,只显示标题,描述和可以包含在论文中的所有章节的可点击列表?单击一章后,与该章相关的其他字段应显示并可编辑。
非常感谢您提出任何建议。
答案 0 :(得分:0)
我建议创建另一个模型Chapter
class Chapter(models.Model):
paper = models.ForeignKey(Paper, related_name="chapters")
chapter = models.CharField(max_length=2, default='1', choices=[(i, i) for i in range(1,10)])
status = models.CharField(max_length=3, choices=[('On','On'), ('Off','Off')], blank=True, null=True)
description = models.CharField(max_length=1500)
word_count = models.IntegerField()
reading_time = models.DurationField(blank=True, null=True)
然后检查inline show as inlines