【问题标题】:how can i save data from multiple screens如何从多个屏幕保存数据
【发布时间】:2018-03-17 02:29:27
【问题描述】:

我有一个名为“Person”的类,其中包含 4 个字段:姓名、电话、文档、照片。在第一个屏幕中,我有 2 个字段:“姓名”和“电话”。在第二个中,我有 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>

地籍.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}}

文档.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) 将第一个屏幕中的 ID 传递到第二个屏幕(例如,作为隐藏的表单字段),以便您知道要更新哪一行。 (2) 添加将会话映射到用户 ID 的方法;第一个屏幕可以使用部分创建的用户的 ID 注册当前会话,然后第二个屏幕可以查找会话的 ID。以此类推。
  • 所以,我已经将第一个屏幕的 ID 传递到了第二个屏幕。还行吧。现在,在第二个中,我需要上传一个文档并保存在同一记录中。
  • 不要尝试在 cmets 中发布代码;它的用户界面很糟糕,而且结果无论如何都是不可读的。更重要的是,您的问题应该包含回答问题所需的所有信息,而无需阅读 cmets。因此,您要么需要编辑问题,要么创建一个新问题。通常是前者,但在这种情况下,我认为你有一个全新的问题,所以创建一个新问题。并确保这次包含minimal, complete, verifiable example

标签: python django sqlite


【解决方案1】:

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

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

如果您不需要它,请不要仅仅为此而构建它。相反,只需将 ID 放在第二页上的隐藏表单字段中,这样当您取回表单时,它就会可用。

不管怎样,既然有了 ID,就可以按 ID 查找 Person 对象。

【讨论】:

  • 是的,我在第二页有de ID。我只是不知道如何保存在第二页。我必须在 views.py 'def id15_document" 中添加什么。
  • @Patricia 正如我在对该问题的评论中所说,如果您有新问题,请创建一个新问题。并确保这次是 MCVE。
  • 我不明白,问题是一样的。如何在第二个屏幕中保存该字段?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-25
  • 2017-01-04
  • 1970-01-01
相关资源
最近更新 更多