您好,我有一个表单页面,我只需要用户填写某些字段,其余字段将根据他们选择的模块为他们预先填写。
虽然我可以从数据库中获取对象-即下拉列表显示模块对象(1),模块对象(2)-我只需要这些对象中的某些字段,这就是为什么这个类似的帖子无法回答我的问题: Populate a django form with data from database in view
这是我的forms.py
class inputClassInformation(forms.Form):
module = forms.ModelChoiceField(queryset=Module.objects.all())
duration = forms.CharField(disabled=True, required=False)
description = forms.CharField()
assigned_professors = forms.ModelChoiceField(queryset=Class.objects.filter(id='assigned_professors'))
models.py
-未显示完整的模型以减少帖子的长度
class Module(models.Model):
subject = models.CharField(max_length=200, default="")
class Class(models.Model):
module = models.ForeignKey(Module, on_delete=models.CASCADE, default="")
duration = models.CharField(max_length=200, default="")
description = models.CharField(max_length=200, default="")
assigned_professors = models.CharField(max_length=200, default="")
因此,预期结果将是:
1)“模块”字段显示主题,而不是其下拉列表和
中的“模块”对象
2)持续时间字段将根据用户选择的模块自动为用户填写。原因是用户仅需手动填写某些字段,其余字段即可自动生成。
这让我困扰了很长时间,我们非常感谢您的帮助。谢谢!
答案 0 :(得分:2)
因此,预期结果将是:
1)“模块”字段显示主题,而不是其下拉列表中的“模块对象”和
2)持续时间字段会自动为用户填写。
这些本质上是两个不同的问题。
要回答第一个问题:您可以覆盖:
__str__
方法和__unicode__
方法。例如,要使您的班级出现主题而不是“ XXXX对象”,请执行以下操作:
class Module(models.Model):
subject = models.CharField(max_length=200, default="")
def __unicode__(self):
return self.subject
类似地,将__unicode__
的{{1}}更改为适合您的Django版本。
现在,回答第二个问题:
2)持续时间字段会自动为用户填写。
您需要做两件事:
__str__
方法一个例子:
save