1

オブジェクトの名前を django-admin サイトに表示したいのですが、django-polymorphic-tree を使用しており、オブジェクトの名前はこのオブジェクトのコンテンツからのテキストである必要があります。どうすればよいですか?

私はすでにポリモーフィック ツリーのサブクラスで __str __() を試しましたが、django-polymorphic-tree が admin.py で list_display を使用しているため、これは機能しません。

これは私のmodels.pyの一部です

class UserTimelines(PolymorphicMPTTModel):
    parent = PolymorphicTreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True, on_delete=models.CASCADE)

    to_show = ''

    class Meta(PolymorphicMPTTModel.Meta):
        verbose_name = "User Timeline"
        verbose_name_plural = "User Timelines"

class Node(UserTimelines):
    node_title = models.CharField(max_length=20, null=True)

    to_show = str(node_title)

    class Meta:
        verbose_name = "Node"
        verbose_name_plural = "Nodes"

class CategoryNode(UserTimelines):
    category_username = models.CharField(max_length=25, null=True)


    to_show = str(category_username) + ' timeline'

    class Meta:
        verbose_name = "Category node"
        verbose_name_plural = "Category nodes"

そしてadmin.pyの一部

class BaseChildAdmin(PolymorphicMPTTChildModelAdmin):
    GENERAL_FIELDSET = ( None, {
        'fields' : ('parent',),
    })

    base_model = UserTimelines
    base_fieldsets = (
        GENERAL_FIELDSET,
    )


class TreeNodeParentAdmin(PolymorphicMPTTParentModelAdmin):
    base_model = UserTimelines
    child_models = (
        (Node),
        (CategoryNode),
    )

    list_display = ('to_show', 'actions_column',)

    class Media:
        css = {
            'all' : ('admin/treenode/admin.css',)
        }

admin.site.register((Node, CategoryNode),BaseChildAdmin)
admin.site.register(UserTimelines, TreeNodeParentAdmin)

要約すると、Node または CategoryNode クラスの「to_show」変数である list_display に追加したいだけです。

4

1 に答える 1

0

数日後、この問題の解決策を作成します。とにかく簡単です。次のように sth を実行する必要があります。

Models.py:

class UserTimelines(PolymorphicMPTTModel):
    parent = PolymorphicTreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True, on_delete=models.CASCADE)

    class Meta(PolymorphicMPTTModel.Meta):
        verbose_name = "User Timeline"
        verbose_name_plural = "User Timelines"

class Node(UserTimelines):
    node_title = models.CharField(max_length=20, null=True)

    def __str__(self):
        return str(self.node_title)

    class Meta:
        verbose_name = "Node"
        verbose_name_plural = "Nodes"

class CategoryNode(UserTimelines):
    category_username = models.CharField(max_length=25, null=True)

    def __str__(self):
        return str(self.category_username) + ' timetable'

    class Meta:
        verbose_name = "Category node"
        verbose_name_plural = "Category nodes"

Admin.py:

class BaseChildAdmin(PolymorphicMPTTChildModelAdmin):
    GENERAL_FIELDSET = ( None, {
        'fields' : ('parent',),
    })

    base_model = UserTimelines
    base_fieldsets = (
        GENERAL_FIELDSET,
    )


class TreeNodeParentAdmin(PolymorphicMPTTParentModelAdmin):
    base_model = UserTimelines
    child_models = (
        (Node),
        (CategoryNode),
    )

    list_display = ('_show', 'actions_column',)

    def _show(self, obj):
        return str(UserTimelines.objects.get(pk=obj.pk).__str__())

    class Media:
    css = {
        'all' : ('admin/treenode/admin.css',)
    }

admin.site.register((Node, CategoryNode),BaseChildAdmin)
admin.site.register(UserTimelines, TreeNodeParentAdmin)

この解決策は将来誰かを助けることができると思うので、ここにいます。

于 2019-07-28T17:29:20.620 に答える