todos. Estoy trabajando en el administrador de mi sitio django, y me encontré con un obstáculo.Autor automático en Django admin
Tengo un modelo Entry
y un modelo Related
. El modelo Related
tiene dos campos clave externos: uno para el modelo Entry
(entry
) y uno para el modelo User
de django (author
). El modelo Related
se considera un "submodelo" del modelo Entry
, y cada usuario solo puede tener uno Related
por Entry
.
En el administrador, Related
se edita en línea con Entry
. Como lo tengo, el administrador muestra sólo una extra Related
a la vez, y se llena automáticamente el campo author
con el usuario actual:
from django.contrib import models
from django.contrib.auth.models import User
class Entry(models.Model):
pass
class Related(models.Model):
entry = models.ForeignKey(Entry)
author = models.ForeignKey(User)
class Meta:
unique_together = ('entry', 'author')
from django.contrib import admin
class RelatedInline(admin.StackedInline):
model = Related
exclude = ('author',)
max_num = 1
class EntryAdmin(admin.ModelAdmin):
inlines = (RelatedInline,)
def save_formset(self, request, form, formset, change):
instances = formset.save(commit=False)
for instance in filter(lambda obj: isinstance(obj, Related), instances):
if instance.__dict__.get('author', None) is None:
instance.author = request.user
instance.save()
formset.save_m2m()
El problema es que si un usuario quiere editar una entrada que ya tiene a Related
por cualquiera, entonces solo se mostrará ese campo relacionado.
Si es posible, me pregunto si alguien tiene alguna idea sobre cómo puedo mantener una configuración similar a esta, pero que el administrador muestre automáticamente el related
del usuario si existe y un formulario vacío si no es así. Salvo eso, me gustaría deshacerme de la línea max_num = 1
y reemplazarla por extra = 1
. Por supuesto, esto significaría que se mostraría un formulario "nuevo relacionado" incluso si el usuario ya tenía uno para la entrada actual, por lo que me pregunto si alguien tiene alguna idea sobre cómo captaría un posible IntegrityError
y le haré saber al usuario que error había ocurrido.
duplicados de http://stackoverflow.com/questions/2101979/django-admin-filter-objects-for-inline-formset –
no estoy seguro de lo que es. – Dave