如何从多个屏幕保存数据

时间:2018-03-17 02:29:27

标签: python django sqlite

我有一个名为“人”的班级,有4个字段:姓名,电话,文件,照片。在第一个屏幕中,我有两个字段:“名称”和“电话”。在第二个我有1个字段:“文档”。在第三个我有1个字段:“照片”。我已经在数据库中保存了“名称”和“电话”字段(表“人”)。我不知道如何保存其他字段,“文档”和“照片”,在同一个表“人”。

urls.py:

urlpatterns = [
    url(r'^$', views.id15_home, name='id15_home'),
    url(r'^create/$', views.id15_create, name='id15_create'),
    url(r'^(?P<id>\d+)/document/$', views.id15_document, name='id15_document'), 
    url(r'^(?P<id>\d+)/photo/$', views.id15_photo, name='id15_photo'),

Views.py:

def id15_home(request):
    return (render(request, "id15/id-15.html"))

def id15_create(request):
    form = id15Form(request.POST or None, request.FILES or None)  # A form bound to the POST data
    if form.is_valid():  # All validation rules pass
        instance = form.save(commit=False)
        instance.save()  # associa o models com o forms
        messages.success(request, "CADASTRADO COM SUCESSO")
        return HttpResponseRedirect(instance.get_absolute_url())
    else:
        messages.error(request, "NÃO CADASTRADO")
    context = {"form": form}
    return render(request, 'id15/cadastro.html', context)

def id15_document(request, id=None):
    instance = get_object_or_404(pessoafisica, id=id)
    form = id15Form(request.POST or None, request.FILES or None, instance=instance)
    if form.is_valid():  
        instance = form.save(commit=False)
        instance.save()  
        messages.success(request, "SUCESS")
        return HttpResponseRedirect(instance.get_absolute_url())
    context = {
        "title": instance.id,
        "instance": instance,
        "form": form,
    }
   return render(request, 'id15/documento.html', context)

models.py:

class pessoafisica(models.Model):

    name = models.CharField('Nome', max_length=100, default='', blank=False)
    telephone= models.CharField('Telefone', max_length=10, default='', blank=False)
    document = models.FileField(null=True, default='', blank=True)
    photo = models.FileField(null=True, default='', blank=True)

    # ----- Tratar url quando passa o "id" de uma tela para outra ----- #
    def get_absolute_url(self):
        return reverse("id15_documento", kwargs={"id": self.id})
        return "/id15/%s" %(self.id)

forms.py:

class id15Form(forms.ModelForm):
    name = forms.CharField(required=True)
    telephone = forms.CharField(required=True)
    class Meta:
        model = pessoafisica
        fields = ('name',
                  'telephone')

ID-15.html

<h1> hellow</h1>
        <a href= '{% url "id15_create" %}'>
            <p><button>Criar minha ID 15</button></p>
        </a>

cadastro.html

<form class=" bd-form-3 " action="" name="form-name" method="post" enctype="multipart/form-data">

<script>
function caps(element){
    element.value = element.value.toUpperCase();
}
</script>

    <input type="text" name='name' id="name" class="bd-form-input" onkeyup="caps(this)">
    {{form.name.errors}}
    <input type="text" name='telephone' id="telephone" class="bd-form-input" onkeyup="caps(this)">
    {{form.telephone.errors}}

document.html

<html>
       <form action="" method="post" enctype="multipart/form-data">
        {% csrf_token %}
        <head>`enter code here`
            <meta charset="UTF-8">
            <title>documento</title>
        </head>
        <body>
            <h1>teste de documento</h1>
            <label>Upload do documento</label></br>
            <input type="file" name='docment.url' id="document" ></br></br>
            {{form.document.error}}

                <button class="btn btn-lg btn-primary btn-block"  type = "submit" >
                Cadastrar </button>
        </body>
        </form>
        </html>

1 个答案:

答案 0 :(得分:0)

您需要保留用户ID(您可以从模型中获取刚刚创建的行)。

如果您需要将会话映射到用户ID,最好的解决方案可能是在存储对象后立即使用ID注册会话;然后,在下一页的端点上,您只需查找当前会话的ID。 (但是,你还需要为那些例如在中途放弃注册并尝试使用其他浏览器返回的人设计一些东西。)

如果您不需要,请不要仅为此构建它。相反,只需将ID放在第二页上的隐藏表单字段中,因此当您获得表单时,它将可用。

无论哪种方式,既然您拥有ID,就可以按ID查找Person对象。