django 无法在list_editable中列出所有字段而不导致错误

hec6srdp  于 2023-01-14  发布在  Go
关注(0)|答案(2)|浏览(111)

我尝试使用list_editable使我的所有字段在同一页面上可编辑。但是除非我在list_display_links中也有一些东西,否则我会得到错误。问题是我没有任何未使用的字段可以放在那里。我可能在某处误解了一个概念。
我所做的是在模型中创建一个"虚拟"字段:dummy = None。这不仅是笨重的,可能是错误的-但它也导致虚拟字段出现在我的管理。
我做错了什么?我试着阅读文档,但我找不到解决问题的方法。我想用"正确的方法"来解决这个问题,不管它是什么。
下面是我的代码:
models.py

...

class Slider(models.Model):
    slider_title = models.CharField(max_length=20)
    slider_text = models.TextField(max_length=200)
    slider_order = models.PositiveSmallIntegerField(
        default=1, blank=True, null=True, choices=[(1, 'first'),
                                                   (2, 'middle'), (3, 'last')])
    dummy = None

    def clean(self):
        validate_only_three_instances(self)

    def __str__(self):
        return self.slider_title

...

admin.py

...

class SliderAdmin(admin.ModelAdmin):

    # remove "add" button
    def has_add_permission(self, request):
        return False

    fieldsets = [
        (None,  {'fields': ['slider_title']}),
        (None,  {'fields': ['slider_text']}),
        (None,  {'fields': ['slider_order']}),
    ]

    list_display = (
        'slider_title', 'slider_text', 'slider_order', 'dummy',)
    list_display_links = ('dummy',)
    list_editable = ('slider_title', 'slider_text', 'slider_order',)

...
ymdaylpp

ymdaylpp1#

我现在明白了,由于某种原因,官方文件并没有让我产生共鸣,但是阅读了这篇文章之后,我还是产生了共鸣:http://django-suit.readthedocs.org/en/latest/sortables.html
总结一下:
list_display-是将显示在管理页面中的字段
list_editable-是哪些字段可以被编辑,而不需要在“编辑”页面中正式打开它们。你基本上可以直接编辑它们。非常棒。
list_display_links-至少一个来自list_display的项目必须作为到编辑页的链接.这个项目不能也是在list_editable否则它不能作为一个链接.(facepalm)
这是我如何结束修改我的文件:
models.py

class Slider(models.Model):
    ...
    link = "Edit"
    ...

admin.py

class SliderAdmin(admin.ModelAdmin):
    ...
    list_display = (
        'slider_title', 'slider_text', 'slider_order', 'link',)
    list_display_links = ('link',)
    list_editable = ('slider_title', 'slider_text', 'slider_order',)
    ...
zengzsys

zengzsys2#

您最好在admin.py中创建一个虚拟列,如下所示,而不是在models.py中创建一个虚拟字段,以便在Django Admin中编辑所有列:

class SliderAdmin(admin.ModelAdmin):
    # ...
    list_display = (
        'slider_title', 'slider_text', 'slider_order', 'dummy',)
    list_display_links = ('dummy',)
    list_editable = ('slider_title', 'slider_text', 'slider_order',)

    @admin.display(description="") # Here
    def dummy(self, obj):
        return ""

您可以看到my post正在解释有关它的更多详细信息。

相关问题