如何使用来自Django数据库的数据填充表单字段

时间:2019-04-20 10:24:25

标签: html django forms

您好,我有一个表单页面,我只需要用户填写某些字段,其余字段将根据他们选择的模块为他们预先填写。

虽然我可以从数据库中获取对象-即下拉列表显示模块对象(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)持续时间字段将根据用户选择的模块自动为用户填写。原因是用户仅需手动填写某些字段,其余字段即可自动生成。

这让我困扰了很长时间,我们非常感谢您的帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

  

因此,预期结果将是:

     

1)“模块”字段显示主题,而不是其下拉列表中的“模块对象”和

     

2)持续时间字段会自动为用户填写。

这些本质上是两个不同的问题。

要回答第一个问题:您可以覆盖:

    python 3和django 1.8的Model类的
  • __str__方法和
  • django <1.8而非python3的Model类的
  • __unicode__方法。

例如,要使您的班级出现主题而不是“ XXXX对象”,请执行以下操作:

class Module(models.Model):
    subject = models.CharField(max_length=200, default="")

    def __unicode__(self):
        return self.subject

类似地,将__unicode__的{​​{1}}更改为适合您的Django版本。

现在,回答第二个问题:

  

2)持续时间字段会自动为用户填写。

您需要做两件事:

  1. 请勿在表单中显示工期字段(除非您想让用户有机会有时手动填写)
  2. 覆盖__str__方法

一个例子:

save