如何使TabularInline可被用户订购?

时间:2019-05-28 13:10:38

标签: python django django-admin

我使用TabularInline类创建了一个管理员视图。使用此视图,就不可能像标准ModelAdmin视图中那样让用户根据自己的喜好对表进行排序/排序。我想实现这一目标。我正在使用Django 2.2.1。

我尝试过的

  • 我搜索了Django文档,但是除了在admin.py文件中对“命令”进行了硬编码之外,我也找不到关于此主题的任何内容。这不是我想要的,我希望管理员用户选择订购方式。
  • 我尝试使用adminsortable2,但是遇到了一些我无法解决的问题。这让我开始思考:使用标准Django包真的不可能吗?

我的代码

我的模型包含TimeFrame,由TimeSlots组成。 这就是我的model.py的样子:

from django.db import models

class TimeFrame(models.Model):
    name = models.CharField(max_length=30)

    def __str__(self):
        return self.name


class TimeSlot(models.Model):
    DAY_CHOICES = ('work', 'Work'), ('weekend', 'Weekend')
    begin_time = models.TimeField()
    end_time = models.TimeField()
    reference = models.CharField(max_length=30) 
    day = models.CharField(max_length=30, choices=DAY_CHOICES)
    timeframe = models.ForeignKey('TimeFrame', on_delete=models.CASCADE)

我不想注册单独的TimeSlot管理员视图,因为TimeSlot始终是TimeFrame的一部分。它们不是一个人存在。

from django.contrib import admin
from .models import *

class TimeSlotInline(admin.TabularInline):
    model = TimeSlot
    ordering = ("day", "begin_time") #hard-coded ordering


@admin.register(TimeFrame)
class TimeFrameAdmin(admin.ModelAdmin):
    inlines = [TimeSlotInline]

预期结果

使管理员用户能够像在标准ModelAdmin视图中那样进行排序。

0 个答案:

没有答案