使用Django ModelForm和非持久的model.Field

时间:2016-02-17 07:48:07

标签: python django

有没有办法将字段添加到Django模型类中,以便:

  1. 它不会持久存储到数据库(即数据库中没有列)
  2. 它确实由ModelForm呈现
  3. 该字段的窗口小部件可以自定义
  4. 我相信3.可以使用自定义窗口小部件完成,并且2.如果字段继承自models.Field,则会发生。但是,我还没有找到一种方法来实现1.而没有打破2.和3.我希望有persist=Falsedb_column=None类型的解决方案。

    情景:

    我只是通过向模型中添加一个类来快速生成数据捕获表单,但为了插入子部分的标题,我仍然需要编辑模板。希望做到以下几点:

    models.py

    from django.db import models
    
    class Applicant(models.Model):    
        sectionA = models.SectionField(help_text="Personal details")
        title = models.CharField(max_length=100)
        name = models.CharField(max_length=100)
    
        sectionB = models.SectionField(help_text="Banking details")
        account = models.CharField(max_length=100)
        pin = models.CharField(max_length=100)
    

    在上面的示例中,sectionA和sectionB是自定义model.Field的实例,它们实际上没有持久化但导致标题由ModelForm和自定义小部件呈现

    最后:

    • 我意识到这可能违反了View和Model的分离。
    • 有关非持久性字段的其他问题,但他们的解决方案未在模型框架中呈现

1 个答案:

答案 0 :(得分:0)

排序,只是不要让它们成为模范领域,不需要它们。

sectionA = "Personal details"
sectionB = "Banking details"

您可以通过您需要的form.instance访问它们,甚至可以将它们设为表单字段而不是字符串,如我在此处所示。