python - registered - Django: no permitir can_delete en GenericStackedInline
from django urls import noreversematch (2)
Tal vez es una función post ''09, pero puede especificar eso sin anular el __init__()
:
class StupidCarOptionsInline(admin.StackedInline):
model = models.StupidOption
form = StupidCarOptionAdminForm
extra = 0
can_delete = False
Construí este modelo que contiene una clave externa genérica:
class MyModel(models.Model):
content_type = models.ForeignKey(ContentType, verbose_name=_(''content type''))
object_id = models.PositiveIntegerField(_(''object id''))
content_object = generic.GenericForeignKey(''content_type'', ''object_id'')
Luego hice un genérico en línea para ponerlo en cualquier clase de ModelAmin:
class MyModelStackedInline(generic.GenericStackedInline):
model = MyModel
formset = generic.generic_inlineformset_factory(MyModel, can_delete=False)
extra = 0
class SomeOhterModelAdmin(admin.ModelAdmin):
inlines = [MyModelStackedInline]
Sin embargo, a pesar de can_ delete=False
arg pasado por generic_inlineformset_factory, siempre veo una casilla de verificación Delete
en mi administrador change_form.
Aquí hay un ejemplo: http://img8.imageshack.us/img8/3323/screenshotbe.png
¿Sabes cómo eliminar esta casilla de verificación?
Gracias :)
Actualización 2016: según la respuesta de Stan a continuación, las versiones modernas de django le permiten establecer can_delete = True
en la subclase GenericStackedInline
, ya que hereda de InlineModelAdmin
Me he encontrado con esto antes - por alguna razón, pasar can_delete como un argumento no funciona, pero si lo hace en el método init del formset. Prueba esto:
class MyInlineFormset(generic.generic_inlineformset_factory(MyModel)):
def __init__(self, *args, **kwargs):
super(MyInlineFormset, self).__init__(*args, **kwargs)
self.can_delete = False
luego en tu clase en línea admin:
class MyModelStackedInline(generic.GenericStackedInline):
model = MyModel
formset = MyInlineFormset
extra = 0