Domanda Django: disabilita can_delete su GenericStackedInline


Ho creato questo modello che contiene una chiave straniera generica:

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')

Successivamente ho creato una linea inline generica per metterla in qualsiasi classe ModelAmin:

class MyModelStackedInline(generic.GenericStackedInline):
    model = MyModel
    formset = generic.generic_inlineformset_factory(MyModel, can_delete=False)
    extra = 0

class SomeOhterModelAdmin(admin.ModelAdmin):
    inlines = [MyModelStackedInline]

Tuttavia, nonostante il can_delete=False arg passato in generico_inlineformset_factory, vedo sempre a Delete checkbox nel mio admin change_form.

Ecco un esempio: http://img8.imageshack.us/img8/3323/screenshotbe.png

Sai come rimuovere questa casella?

Grazie :)


19
2017-09-24 10:16


origine


risposte:


Aggiornamento 2016: come da risposta di Stan in basso, le versioni moderne di django ti consentono di impostare can_delete = True sul GenericStackedInline sottoclasse, dal momento che eredita da InlineModelAdmin


Ho avuto modo di farlo prima - per qualche motivo passare can_delete come argomento non funziona, ma impostandolo nel formset dentro il metodo fa. Prova questo:

class MyInlineFormset(generic.generic_inlineformset_factory(MyModel)):
    def __init__(self, *args, **kwargs):
        super(MyInlineFormset, self).__init__(*args, **kwargs)
        self.can_delete = False

quindi nella tua classe inline admin:

class MyModelStackedInline(generic.GenericStackedInline):
    model = MyModel
    formset = MyInlineFormset
    extra = 0

12
2017-09-24 20:48



Forse È una funzionalità post '09, ma è possibile specificarla senza sovrascrivere il __init__() metodo :

class StupidCarOptionsInline(admin.StackedInline):
    model = models.StupidOption
    form = StupidCarOptionAdminForm
    extra = 0
    can_delete = False

31
2018-02-04 08:33