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.