23

一般的な外部キーを含むこのモデルを構築しました。

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]

ただし、generic_inlineformset_factory で can_ arg が渡されたにもかかわらず、管理者の change_form にはdelete=False常にチェックボックスが表示されます。Delete

以下に例を示します: http://img8.imageshack.us/img8/3323/screenshotbe.png

このチェックボックスを削除する方法を知っていますか?

ありがとうございました :)

4

2 に答える 2

45

'09以降の機能かもしれませんが、メソッドをオーバーライドせずに指定できます__init__()

class StupidCarOptionsInline(admin.StackedInline):
    model = models.StupidOption
    form = StupidCarOptionAdminForm
    extra = 0
    can_delete = False
于 2011-02-04T08:33:29.373 に答える
14

2016年更新:以下のスタンの回答によると、djangoの最新バージョンでは、サブクラスを継承しているためcan_delete = True、サブクラスを設定できますGenericStackedInlineInlineModelAdmin


以前にこれに遭遇しました-何らかの理由で 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

次に、管理者のインライン クラスで:

class MyModelStackedInline(generic.GenericStackedInline):
    model = MyModel
    formset = MyInlineFormset
    extra = 0
于 2009-09-24T20:48:45.190 に答える