Подтвердить что ты не робот

Django: запретить can_delete в GenericStackedInline

Я построил эту модель, которая содержит общий внешний ключ:

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

Далее я сделал общий набор встроенных строк, чтобы поместить его в любой класс ModelAmin:

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

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

Однако, несмотря на аргумент can_ delete=False, переданный в generic_inlineformset_factory, я всегда вижу флажок Delete в моей переменной change_form.

Вот пример: http://img8.imageshack.us/img8/3323/screenshotbe.png

Знаете ли вы, как удалить этот флажок?

Спасибо:)

4b9b3361

Ответ 1

Обновление 2016: согласно нижеприведенному сценарию, современные версии django позволяют вам установить can_delete = True на GenericStackedInline, поскольку он наследует от InlineModelAdmin


Я столкнулся с этим раньше - по какой-то причине передача can_delete в качестве аргумента не работает, но установка его в методе init делает. Попробуйте следующее:

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

то в вашем встроенном классе admin:

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

Ответ 2

Возможно, это функция post '09, но вы можете указать, что без переопределения метода __init__():

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