Esa pregunta puede tener un aspecto similar a this one, pero no es ...Anulación ahorrar en Django InlineModelAdmin
que tienen una estructura de modelo como:
class Customer(models.Model):
....
class CustomerCompany(models.Model):
customer = models.ForeignKey(Customer)
type = models.SmallIntegerField(....)
estoy usando InlineModels
, y tienen dos tipos de CustomerCampany.type
. Así que definir dos línea diversa para la CustomerCompany
y OV de anulación InlineModelAdmin.queryset
class CustomerAdmin(admin.ModelAdmin):
inlines=[CustomerCompanyType1Inline, CustomerCompanyType2Inline]
class CustomerCompanyType1Inline(admin.TabularInline):
model = CustomerCompany
def queryset(self, request):
return super(CustomerCompanyType1Inline, self).queryset(request).filter(type=1)
class CustomerCompanyType2Inline(admin.TabularInline):
model = CustomerCompany
def queryset(self, request):
return super(CustomerCompanyType2Inline, self).queryset(request).filter(type=2)
Todo es agradable y bueno hasta aquí, pero para añadir nuevos registros para InlineModelAdmin
, todavía tengo que mostrar type
campo de la CustomerCompany
en el AdminForm
, ya que no puedo anular save
método de un InlineModelAdmin
gustar:
class CustomerCompanyType2Inline(admin.TabularInline):
model = CustomerCompany
def queryset(self, request):
return super(CustomerCompanyType2Inline, self).queryset(request).filter(type=2)
#Following override do not work
def save_model(self, request, obj, form, change):
obj.type=2
obj.save()
Usando una señal también no es una solución ya que mi señal sender
será el mismo Model
, por lo que no puede detectar qué InlineModelAdmin
enviarlo y lo que debe ser la type
...
¿Hay una manera que me permita configurar type
campo antes de guardar?
+1 buen enfoque para usar modelos de proxy.Actualicé mi respuesta para corregir los errores más obvios que mencionaste. Eso todavía deja el problema de resolver cuál inline representa el formset. – Alasdair
En realidad, el enfoque del modelo de proxy elimina la necesidad de anular 'save_formset'. Los proxies mismos han anulado los métodos 'save' que saben cómo guardar como el tipo correcto. Entonces, simplemente usa las líneas sin preocuparse por eso. –
Mi comentario no estaba claro: estaba de acuerdo en que, incluso después de solucionar los problemas en 'save_formset' (' save_m2m', etc.), todavía estaba el problema de qué en línea estaba guardando. Entendí que el enfoque del modelo de proxy evita eso :) – Alasdair