Django上的实例无法正常工作

时间:2014-09-05 16:33:07

标签: python django django-forms

我正在尝试进行注册过程的第二部分,其中该人(在葡萄牙语Pessoa中)会提供一些关于他自己的额外信息,并且还会注册一些关于他拥有的汽车的信息(通过复选框查看)名为“tem_carro'”的模板,英文版本为“has_car'”。 在此步骤中,此人已经拥有用户名和密码以及一些基本信息(如姓名),这些信息是强制性的,并且会填写非强制性信息。

instance=pessoa(据称从该人那里得到强制性信息)的问题不起作用,因此我无法对表格进行验证。

在views.py中:

def continuar_cadastro(request):
    pessoa = request.user.pessoa # this is working
    # and changing the above line to pessoa = Pessoa.objects.get(id = 1) for exemple doesn't solve either the validation problem
    if request.method == 'POST':
        pessoaForm = CadastroPessoaForm(request.POST, instance=pessoa)  # the form isn't getting the pessoa's info (primeiro_nome and sobrenome)
        if pessoaForm.is_valid():   # I can't get past here!
            try:
                request.POST['tem_carro']
                carro = Carro(motorista=pessoa)
                carroForm = CadastroCarroForm(request.POST, instance=carro)
                if carroForm.is_valid():
                    carroForm.save()
                    pessoaForm.save()
                else:
                    print(carroForm)
                    return HttpResponse("<script>alert('Form do carro inválido.');javascript:history.back();</script>")
            except:
                pessoaForm.save()
        else:
            print(pessoaForm)
            return HttpResponse("<script>alert('Form de informações pessoais inválido.');javascript:history.back();</script>")
    return render_to_response('continuar_cadastro.html', locals(), context_instance=RequestContext(request))

在forms.py中:

class CadastroPessoaForm(forms.ModelForm):
    class Meta:
        model = Pessoa
        exclude =('usuario', 'nome_completo')

在models.py中:

class Pessoa(models.Model):
    usuario = models.OneToOneField(User, related_name= 'pessoa')
    primeiro_nome = models.CharField("Primeiro nome", max_length= 64)
    sobrenome = models.CharField("Sobrenome", max_length=64)
    celular = models.CharField("Calular", max_length= 16, null=True, blank=True)
    residencial = models.CharField("Residencial", max_length=16, null=True, blank=True)

谢谢!

编辑1: 我在验证表单时遇到的错误是这样的(我打印了表单):

<tr><th><label for="id_primeiro_nome">Primeiro nome:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input id="id_primeiro_nome" maxlength="64" name="primeiro_nome" type="text" /></td></tr>
<tr><th><label for="id_sobrenome">Sobrenome:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input id="id_sobrenome" maxlength="64" name="sobrenome" type="text" /></td></tr>
<tr><th><label for="id_celular">Calular:</label></th><td><input id="id_celular" maxlength="16" name="celular" type="text" /></td></tr>
<tr><th><label for="id_residencial">Residencial:</label></th><td><input id="id_residencial" maxlength="16" name="residencial" type="text" value="khsdjgf" /></td></tr>

2 个答案:

答案 0 :(得分:1)

您的视图未创建获取请求的表单 - 您如何呈现初始表单?

如果表单无效,请打印pessoaForm.errors以查看问题所在。打印request.POST以确保预期的数据存在。它看起来像是一个有问题的sobernome字段,所以要特别仔细检查。

答案 1 :(得分:0)

我认为这里的主要问题是您用来实施&#34;用户个人资料&#34; 的方法。见Storing additional information about users。你已经走了一半。

如果您已正确配置用户个人资料,则可以将表单与您的个人资料类关联 - 在这种情况下为 Pessoa - 。

另一方面,您要排除usuarionome_completo,但最后一个不是Pessoa类的字段。

此外,您的Pessoa类的字段与某些User模型字段相同,例如:primeiro_nome

建议:

  1. 访问我发布的链接。
  2. 检查您的设计,或许您不想在primeiro_nome课程中定义字段Pessoa
  3. 检查request.user.pessoa中的数据是否符合您的期望。这意味着primeiro_nomesobrenome字段包含一些数据。
  4. 最后在这个answer - 最后评论 - 你可以看到这个OP正在努力解决你的问题。

    他说:为了记录我还尝试user_form = UserForm(request.POST, instance=user, prefix='user'):没有错误,但总是返回一个空表单

    也许您可以尝试按照此答案的方式加载您的表单。