Notas sobre Django

Una de las cosa más chidas de Django es que hace la partde del admin, pero eso también obliga a entender algunas cosas. De entrada hay dos problemas:

1) Que el user_id de los elementos del sitio no sean editables como lo es por default

2) Que el usuario logeado sólo pueda ver y editar los registros que le corresponden

1) Para resolver la primera cuestión se debe poner editable=False en el modelo en el campo que hace el FKey, por ejemplo en el caso de los blogs:

author    = models.ForeignKey(User, verbose_name=_(‘Author’),editable=False)

esto hara que la cortina de usuarios no aparezca. Pero esto también enviara un mensaje de error al querer guardar la entrada porque el formulario no envia el campo author_id que es obligatorio. Debemos hacer un override al método save para meter el campo que nos falta. Para extender o personalizar la zona admin de nuestra app se debe crear un archivo admin.py dentro de nuestra app y ahi hacer el override del save con el método save_model:

def save_model(self, request, obj, form, change):
     obj.author_id = request.user.id
     obj.save()

2) Pero aún asi podemos ver entradas y noticias de otros usuarios asi que hay que editar el query del select por lo que se necesita además sobreescribir el query de la zona admin:

def queryset(self, request):
     qs = self.model._default_manager.get_query_set().filter(author = request.user)
     ordering = self.ordering
     return qs

 Y con eso agregamos cosas con nuestro id y el usuario sólo puede ver lo suyo.

Leave a Reply

Your email address will not be published. Required fields are marked *