我需要对Django中的表单进行CRUD操作,但我对如何实现这一点感到困惑。我的意思是我正在寻找不同的情况和方法。
请考虑以下形式:
class UsuarioFidetel(models.Model):
"""
Modelo de usuario fidetel
"""
usuario = models.CharField(max_length=30)
id_usuario = models.IntegerField()
nombre = models.CharField(max_length=255, null=True)
apellido = models.CharField(max_length=255, null=True)
tipo_cedula = models.CharField(max_length=1, null=True)
cedula = models.CharField(max_length=9, null=True)
fecha_nacimiento = models.DateField(null=True, blank=True)
sexo = models.CharField(max_length=1, null=True)
correo = models.EmailField(max_length=254, null=True)
estado_civil = models.CharField(max_length=1, null=True)
def __unicode__(self):
return self.nombre
db上有几个用户存储了这些字段。现在,我需要从不同的表单查询并显示用户的数据,甚至编辑此数据/用户。
我已经在models.py上有这个了,我模板上的所有内容都正常工作,但是我需要进行此查询,我知道我应该使用它:
usuarios = UsuarioFidetel.objects.all().order_by("nombre").values('nombre')
但我对如何实现这一点感到困惑,或者我应该使用queryset
?
欢迎任何示例或想法。
提前致谢!
更新
我的forms.py:
class FormularioUsuarioFidetel(FormularioPersona):
"""
Clase que contiene el formulario que permite ingresar y modificar los
datos del usuario de fidetel
"""
usuariofide = forms.CharField()
sexo = ChoiceField(required=True,
choices=SEXO_OPCIONES,
error_messages={'required': 'El Sexo es un campo obligatorio'})
estado_civil = ChoiceField(required=True,
choices=ESTADO_CIVIL_OPCIONES,
error_messages={'required': 'El Estado Civil es un campo obligatorio'})
class Meta:
model = UsuarioFidetel
fields = ('nombre', 'apellido', 'tipo_cedula', 'cedula', 'correo', 'sexo', 'estado_civil', 'fecha_nacimiento')
def __init__(self, *args, **kwargs):
super(FormularioUsuarioFidetel, self).__init__(*args, **kwargs)
self.fields['fecha_nacimiento'].widget.attrs = {'style':'width: 90px',
'maxlength':'10'}
self.fields['fecha_nacimiento'].required = True
self.fields['fecha_nacimiento'].error_messages = {'required': 'La Fecha de Nacimiento es un campo obligatorio'}
def clean_fecha_nacimiento(self):
"""
Método que valida que la fecha de nacimiento no sea posterior a la fecha
actual
@return: Un mensaje de error si la fecha de nacimiento es posterior a la
fecha actual
"""
fecha_nacimiento = str(self.cleaned_data['fecha_nacimiento'])
if fecha_nacimiento > str(datetime.datetime.now().date()):
raise forms.ValidationError(u"La fecha de nacimiento no puede ser posterior a la fecha actual")
return self.cleaned_data['fecha_nacimiento']
我的views.py
def consultar_usuario_fidetel(request):
"""
Muestra el formulario de consulta de datos del usuario de fidetel
@return: El formulario de consulta de datos del usuario de fidetel
"""
usuario_fidetel = request.session['usuario_fidetel']
if(not usuario_fidetel.tipo_cedula):
return render_to_response('fidetel/inicio.html',
{ },
context_instance=RequestContext(request))
sexo = dict(SEXO_OPCIONES)[usuario_fidetel.sexo]
estado_civil = dict(ESTADO_CIVIL_OPCIONES)[usuario_fidetel.estado_civil]
return render_to_response('fidetel/consultar_usuario_fidetel.html',
{ 'usuario_fidetel': usuario_fidetel,
'sexo': sexo,
'estado_civil': estado_civil },
context_instance=RequestContext(request))
@autenticacion_fidetel_requerida
@permiso_requerido([PERMISOS_FONDO['MODIFICAR_USUARIO_FIDETEL']])
让我自己解释一下,通过这种形式和视图,我可以编辑用户登录到webapp的数据,现在,我需要的是将从模型UsuarioFidetel
存储的所有用户加载到db,无论谁登录到应用程序,可能会搜索它的名字或其他内容......
如果您需要进一步解释,请告诉我,谢谢。
答案 0 :(得分:1)
我不确定你在问什么,因为在django你可以使用generic views来自动化你的日常工作;你需要做的就是适当地配置它们。
由于您已有表单,因此可以使用CreateView
, UpdateView
, DeleteView
来处理CRUD
操作。
要简单列出所有对象,请使用ListView
,如下所示:
在views.py
:
from django.views.generic import ListView
from .models import UsuarioFidetel
class UsarioList(ListView):
model = UsuarioFidetel
template_name = 'all_list.html'
在urls.py
:
from django.conf.urls import patterns, url
from yourapp.views import UsarioList
urlpatterns = patterns('',
url(r'^usario/$', UsarioList.as_view()),
)
在all_list.html
中,您将获得一个变量object_list
,它将是您所有对象的列表,很好地分页:
{% if object_list %}
{% for obj in object_list %}
{{ obj }}
{% endfor %}
{% if is_paginated %}
<div class="pagination">
<span class="page-links">
{% if page_obj.has_previous %}
<a href="/usario?page={{ page_obj.previous_page_number }}"><</a>
{% endif %}
<span class="page-current">
Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
</span>
{% if page_obj.has_next %}
<a href="/usario?page={{ page_obj.next_page_number }}">></a>
{% endif %}
</span>
</div>
{% endif %}
{% else %}
<p>No records found</p>
{% endif %}
答案 1 :(得分:1)
views.py #get all users并注入users.htm
def users(request):
users=UsuarioFidetel.objects.all()
context = {'users': users}
return render(request, 'users.html', context)
users.html中的
{% for user in users %}
<li>{{user.usuario}}<span>{{user.apellido}}</span></li>
<a href="{% url 'editUser' user.id %} "></a>
<a href="{% url 'deletetUser' user.id %}"></i></a>
{% endfor %}
这个例子你现在有什么想法