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
Знаете ли вы, как удалить этот флажок?
Спасибо:)
Ответы
Ответ 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