我正在尝试使用继承来扩展Django中的User
模型。这是我的模特:
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
模型。而这些,并未显示如何在应用程序内部注册用户。
任何帮助都将非常感谢! :)
答案 0 :(得分:0)
毕竟问题在于观点。我强迫字段“date_joined”和“last_login”接收datetime.now()
,因为我正在关注Django管理模板。遗憾的是,这不正确,每当我尝试添加用户时,它都会跳转到错误模板,这意味着表单未正确填充。解决方案是让这些字段接收date.today()
,现在它可以正常工作。
我认为这种模型继承仍然不能很好地工作(Python 2.7和Django 1.3)。当您在模型中使用它时,请确保Django在您的数据库中创建了哪种字段,这将为您节省很多麻烦。
答案 1 :(得分:0)
总的来说,我认为模型继承工作正常,没有重大问题。 关于用户模型,我没有太多的经验,但也许你的问题是因为你没有像Django那样提出这个问题?
以防万一你的内容,一些更有趣的帖子:h