Django:如何保存部分填写的表单状态

Django:如何保存部分填写的表单状态,django,django-models,django-views,Django,Django Models,Django Views,我不知道该怎么问这个问题 问题是我有一个在模型中创建新条目的主视图。这个模型有一些1-many关系,所以我添加了一个+按钮来添加这个字段(二级模型)的新条目,以防它们不存在。当我提交这些新数据时,我会重定向到上一页(主视图),如果您已经在主视图中填写了一些字段,那么这些信息就会丢失 有人能告诉我处理这件事的最好方法是什么吗? 提前谢谢 更新: “主模型视图” class OrganismCreate(LoginRequiredMixin,CreateView): """Templa

我不知道该怎么问这个问题

问题是我有一个在模型中创建新条目的主视图。这个模型有一些1-many关系,所以我添加了一个+按钮来添加这个字段(二级模型)的新条目,以防它们不存在。当我提交这些新数据时,我会重定向到上一页(主视图),如果您已经在主视图中填写了一些字段,那么这些信息就会丢失

有人能告诉我处理这件事的最好方法是什么吗? 提前谢谢

更新: “主模型视图”

 class OrganismCreate(LoginRequiredMixin,CreateView):
      """Template: //catalog/templates/catalog/organism_form.html"""
      model = Organism
      fields = '__all__'
“主模型模板”(零件)

以及相关的模型模板

{% block content %}
<form action="" method="post">
 {% csrf_token %}
    <table>
     {{ form.as_table }}
    </table>
   <input type="hidden" name="next" value="{{ pre }}">
 <input type="submit" class="btn btn-success" value="Submit" />
</form>
{% endblock %}
{%block content%}
{%csrf_令牌%}
{{form.as_table}}
{%endblock%}

有很多方法可以解决这个问题。这里有一些建议。非排他性列表:

  • 将数据库中不完整的模型数据保存为最终数据的“草稿”版本。这可能是一个完全不同的模型,或者使用相同的模型(假设相关字段可以为空),并给它一个“draft”标志或类似标志
  • 使用内联表单集在同一视图中创建相关对象。Django Extra View提供了一些有用的工具
  • 使用JavaScript,将未完成的表单数据保存到本地存储,然后在再次加载原始表单时将其恢复

  • 我已经实现了一个草案系统,按照1。在@ChidG的回答中

    在模型中,我有类似于

    class AbstractThing(models.Model):
        field = models.CharField()
    
        class Meta:
            abstract = True
    
    class CompleteThing(AbstractThing):
    
        class Meta:
            managed = True
            db_table = 'complete_thing'
    
    class IncompleteThing(AbstractThing):
    
        fields_to_not_blank = [AbstractThing._meta.get_field(x) for x in []] #if you don't want to change some fields
        for f in AbstractThing._meta.fields:
            if f not in fields_to_not_blank:
                f.blank = True
                f.null = True
    
        class Meta:
            managed = True
            db_table = 'incomplete_thing'
    

    然后,您可以使用模型表单并在视图中处理案例。

    您可以发布一些代码吗,您的视图可能会……谢谢您的回答。实际上,主视图只是一个通用的CreateView。我添加了一些代码。谢谢你的建议。我真的很感激。关于(1和3):在什么阶段可以在主窗体中保存字段的实际状态?换句话说,如何触发“保存”功能。?我读了(2),但由于我对网络开发还不熟悉,我发现文档不完整。。。将尝试用它来编码/测试某些东西!我不完全清楚您的代码,但这里有一个可能的答案-对于1,您可以将现有表单数据发布到您的institution create视图,并在那里创建草稿模型。将需要重写该视图。对于3,单击该
    institution\u create
    链接,触发JS保存到本地存储,然后使用JS手动重定向。我认为花时间去了解Django的额外视图是你最好的选择,它正是为了这个目的而制作的。同样的功能也可以手动实现。谢谢将给django额外的视图一次尝试!
    {% block content %}
    <form action="" method="post">
     {% csrf_token %}
        <table>
         {{ form.as_table }}
        </table>
       <input type="hidden" name="next" value="{{ pre }}">
     <input type="submit" class="btn btn-success" value="Submit" />
    </form>
    {% endblock %}
    
    class AbstractThing(models.Model):
        field = models.CharField()
    
        class Meta:
            abstract = True
    
    class CompleteThing(AbstractThing):
    
        class Meta:
            managed = True
            db_table = 'complete_thing'
    
    class IncompleteThing(AbstractThing):
    
        fields_to_not_blank = [AbstractThing._meta.get_field(x) for x in []] #if you don't want to change some fields
        for f in AbstractThing._meta.fields:
            if f not in fields_to_not_blank:
                f.blank = True
                f.null = True
    
        class Meta:
            managed = True
            db_table = 'incomplete_thing'