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

时间:2017-05-08 07:05:27

标签: django django-models django-views

我不知道如何提出这个问题。

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

有人可以建议我处理这个问题的最佳方法是什么? 提前谢谢!

更新: '主要模型视图'

 class OrganismCreate(LoginRequiredMixin,CreateView):
      """Template: //catalog/templates/catalog/organism_form.html"""
      model = Organism
      fields = '__all__'

'主模型模板'(部分)

<form action="" method="post">
 {% csrf_token %}
  <div class="panel-group">
   <div class="panel panel-default">
    <div class="panel-heading">Add a new entry: </div>
     <div class="panel-body">
    <hr>
     <div class="row">
      <div class="form-group col-sm-4 col-md-3">
      <div class="form-group col-sm-4 col-md-3">
        <label for="id_inst_own">Owner:</label>
        {% render_field form.inst_own class="form-control" %}
        <a href="{% url 'catalog:institution_create' %}"> <i class="fa fa-plus-circle "></i> Add new  </a>
      </div>
  <div class="panel panel-default">
  <div class="panel-body">
    ...........................................
    <button type="submit" class="btn btn-primary"> <span class="glyphicon glyphicon-filter"></span> submit </button>
  </div>

  </div>
</div>

然后是相关的模型视图:

def test_f(request):
    if request.method == "GET":
        Form = InstitutionForm()
        render(request, 'catalog/institution_form.html')

    if request.method == "POST":
        Form = InstitutionForm(request.POST)
        if Form.is_valid():
            Form.save()
            next = request.POST.get('next', '/')
            return redirect(next)
    pre=request.META.get('HTTP_REFERER')
    return render(request, 'catalog/institution_form.html',{"form" : Form, "pre": pre})

以及相关的模型模板

{% 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 %}

1 个答案:

答案 0 :(得分:0)

我已经实施了一个草案系统,以便在@ ChidG的答案中按照1.的方式执行此操作。

在模特中我有类似

的东西
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'

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