1

我正在尝试User使用继承扩展 Django 中的模型。这是我的模型:

class Paciente (User):
    Carteira = models.CharField(max_length=50, 
        verbose_name="Num Carteira Plano Saude",unique=True)
    Convenio = models.ForeignKey(Operadora,'Descricao', related_name="convenio", 
        verbose_name="Convenio",unique=True)
    DDD = models.CharField(max_length=2, verbose_name="DDD")
    Telefone = models.CharField(max_length=10, verbose_name="Telefone")

这是我的观点:

def paciente_register(request):
    PacienteFormSet = modelformset_factory(Paciente)

    if request.method == 'POST':
        form = PacienteFormSet(request.POST or None, 
            request.FILES or None, queryset=Paciente.objects.none(), 
            initial=[{
                'is_staff': False,
                'is_active': True, 
                'is_superuser': False, 
                'date_joined': datetime.now(), 
                'last_login': datetime.now()
            }]
        ) #incluir
        if form.is_valid():
            instance = form.save(commit=False) #pre-salva o registro
            for logvalue in instance:  # repoe os valores 'hidden' de log
                logvalue.is_staff = False
                logvalue.is_active = True
                logvalue.is_superuser = False
                logvalue.date_joined = datetime.now()
                logvalue.last_login = datetime.now()
            for reform in instance:  # salva no banco
                reform.save()
        else:
            return HttpResponseRedirect('/erro/')
    else:
        form = PacienteFormSet(queryset=Paciente.objects.none(), 
            initial=[{
                'is_staff':False,
                'is_active': True,
                'is_superuser': False,
                'date_joined': datetime.now(),
                'last_login': datetime.now()
            }]
        ) #incluir
    return render_to_response('register.html', {'form': form,}, context_instance=RequestContext(request))

最后但并非最不重要的是,我的模板:

<form enctype="multipart/form-data" method="POST" action="/paciente_register/" >{% csrf_token %}
{{ form.management_form }}
   {% for formy in form.forms %}
      {{ formy.username.label_tag}}:{{formy.username}}<br>
      {{ formy.password.label_tag}}:{{formy.password}}<br>
      {{ formy.Carteira.label_tag}}:{{formy.Carteira}}<br>
      {{ formy.Convenio.label_tag}}:{{formy.Convenio}}<br>
      {{ formy.DDD.label_tag}}:{{formy.DDD}}<br>
      {{ formy.Telefone.label_tag}}:{{formy.Telefone}}<br>
      {{formy.is_staff.as_hidden}}
      {{formy.is_active.as_hidden}}
      {{formy.is_superuser.as_hidden}} 
      {{formy.date_joined.as_hidden}}
      {{formy.last_login.as_hidden}}

    {% endfor %}   
    <input type="submit" name="submit" value="Salvar" />
</form>

用户应该注册自己,但他只能编辑一些字段,因为我在视图和模板中设置的其他字段,我隐藏了它们。

但问题是我的表格没有验证。我做了很多研究,但互联网上只有几个例子使用继承来扩展User模型。而这并没有显示在应用程序中进行用户注册的视图。

任何帮助将不胜感激!:)

4

2 回答 2

0

一般来说,我认为模型继承工作正常,没有重大问题。关于 User 模型,我没有太多经验,但也许你的问题是因为你没有按照Django的建议去做?

万一你有兴趣,一些更有趣的帖子:h

于 2012-08-23T06:42:09.817 回答
0

毕竟,问题出在眼前。我正在强制接收“date_joined”和“last_login”字段,datetime.now()因为我遵循 Django 管理模板。可悲的是,这不正确,每次我尝试添加用户时,它都会跳转到错误模板,这意味着表单没有正确填写。解决方案是让这些字段接收date.today(),现在它工作正常。

我认为这种模型继承仍然不是很好(Python 2.7 和 Django 1.3)。当您在模型中使用它时,请确定 Django 在您的数据库中创建了什么样的字段,这将为您省去很多麻烦。

于 2012-08-22T14:35:05.313 回答