如何检索以前以django格式输入的数据?

时间:2018-07-08 11:29:20

标签: python django django-models django-forms django-templates

我已经编写了代码,以在Django的html页面上显示表单。每次单击更新按钮时,它都显示一个空白表格。但是我想要的是,如果我之前输入了一些数据,那么这些数据应该以正常的形式显示。然后,我必须能够对其进行编辑。但是,我每次都会得到一个空表格。

views.py:

def update_longterm(request):
if not request.user.is_authenticated:
    return render(request, 'cups4/index.html')
else:
    form = LongtermForm(request.POST or None, request.FILES or None)
    if form.is_valid():
        longterm = form.save(commit=False)
        longterm.user = request.user
        longterm.body = form.cleaned_data['body']
        longterm.save()
        return render(request, 'cups4/detail_longterm.html', {'longterm': longterm})
    context = {
        "form": form,
    }
    return render(request, 'cups4/create_template.html', context)

Models.py:

class NotNecessary(models.Model):
title = models.TextField("NotNecessary",editable=False)
slug = models.SlugField(max_length=250,
                        unique_for_date='publish')
user = models.ForeignKey(User, default=1,on_delete=models.CASCADE)
body = models.TextField()
publish = models.DateTimeField(default=timezone.now)
updated = models.DateTimeField(auto_now=True)

def __str__(self):
    return self.title

Forms.py:

class LongtermForm(forms.ModelForm):

class Meta:
    model = Longterm
    fields = [ 'body',]

模板:

    {% extends 'base.html' %}
{% block title %}Immediate{% endblock %}
{% block content %}

<div class="container-fluid">

    <div class="row">

        <div class="col-sm-12 col-md-7">
            <div class="panel panel-default">
                <div class="panel-body">
                    <h3>Immediate Goals</h3>
                    {% if error_message %}
                        <p><strong>{{ error_message }}</strong></p>
                    {% endif %}
                    <form class="form-horizontal" role="form" action="" method="post" enctype="multipart/form-data">
                        {% csrf_token %}
                        {% include 'cups4/form_template.html' %}
                        <div class="form-group">
                            <div class="col-sm-offset-2 col-sm-10">
                                <button type="submit" class="btn btn-success">Submit</button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>

    </div>

</div>
{% endblock %}

每次都会显示一个新表格。相反,我希望加载以前的数据。怎么做?预先感谢!

1 个答案:

答案 0 :(得分:0)

可能有两种情况:

  1. 更新已创建的对象时,可以从数据库中获取它,并传递为:form = LongtermForm(instance=your_object)
  2. 在其他情况下,如果要添加新对象,并且希望在某些错误的情况下由用户查看以前输入的信息。您可以将表单呈现为:

    form = LongtermForm(request.POST or None, request.FILES or None)

在这两种情况下,请确保您正在渲染 form.errors form.non_field_errors ,以防您在 create_template.html中手动渲染表单,否则django会自动对其进行处理(例如,您将其渲染为)。 {{ form.as_p }}