【问题标题】:Django-polymorphic-tree list_display object name from Contents Fields来自内容字段的 Django-polymorphic-tree list_display 对象名称
【发布时间】:2019-12-01 20:49:11
【问题描述】:

我想在 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)

总结一下,我只想将我的“to_show”变量从 Node 或 CategoryNode 类添加到 list_display。

【问题讨论】:

    标签: python django-models django-admin django-2.2 django-polymorphic


    【解决方案1】:

    几天后,我解决了这个问题。反正很简单,你必须这样做:

    模型.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)
    

    我认为这个解决方案可以帮助将来的人,所以你来了。

    【讨论】:

      猜你喜欢
      • 2021-06-24
      • 2020-01-10
      • 2017-10-09
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 2021-02-25
      相关资源
      最近更新 更多