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

use*_*169 10 python django admin

我正在尝试list_editable使我的所有字段都可以在同一页面上编辑。但除非我也有一些东西,否则我list_display_links会出错。我没有任何未使用的字段放在那里的问题。我可能在某处误解了一个概念。

我所做的就是在模型中创建一个“虚拟”字段:dummy = None。这不仅笨拙而且可能是错误的 - 而且还会导致虚拟字段出现在我的管理员中。

我究竟做错了什么?我尝试阅读文档,但找不到解决问题的方法。我想以“正确的方式”解决这个问题,无论那是什么。

这是我的代码:

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

...
Run Code Online (Sandbox Code Playgroud)

管理文件

...

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',)

...
Run Code Online (Sandbox Code Playgroud)

use*_*169 11

我现在知道了。出于某种原因,官方文档没有和我一起点击,但是阅读它:http : //django-suit.readthedocs.org/en/latest/sortables.html

总结一下:

list_display - 是哪些字段将出现在管理页面中

list_editable- 用于编辑哪些字段而无需在“编辑”页面中正式打开它们。您基本上可以直接在线编辑它们。非常棒。

list_display_links-list_display必须至少有一项来自编辑页面的链接。此项目也不能在,list_editable否则它不能作为链接。(脸掌)

这就是我最终修改文件的方式:

模型.py

class Slider(models.Model):
    ...
    link = "Edit"
    ...
Run Code Online (Sandbox Code Playgroud)

管理文件

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',)
    ...
Run Code Online (Sandbox Code Playgroud)