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