django - Wagtail 内联面板 - 排序顺序
问题描述
因此,我正在努力在我的网站上的 InlinePanel (对于可订购的)中订购选择。在管理页面中,添加新项目时,选项按添加到站点的顺序显示(因此,本质上是该项目的“id”);考虑到有数百个选项以非用户友好的方式呈现,这并不理想。
我假设这需要定义为 orderable 中的 ordering meta,但我似乎无法让它工作。这就是我的可订购商品的样子:
class RelatedPeople(Orderable):
service = ParentalKey('service.Services', related_name='related_person')
person = models.ForeignKey('person.People', null=True, on_delete=models.SET_NULL, related_name='related_service')
panels = [
FieldPanel('person')
]
我尝试了以下但没有成功:
class Meta:
ordering = 'person'
并且,尝试在我想要排序的“人”中附加字段,“姓名”:
class Meta:
ordering = 'person.name'
必须有一种明显的方法来解决我正在寻找的这个问题。从内容创建者的角度来看,“id”的默认排序顺序(在本例中为“person.People”)很少适合。
任何建议将不胜感激!
提前致谢,
抢
解决方案
人物模型应该有:
ordering = ['name']
代替
ordering = 'name'
并且您的 Orderable 对象应该将其元更改为
class Meta(Orderable.Meta):
通过 Django Docs,这是抽象基类和排序的示例:
元和多表继承¶
在多表继承的情况下,子类继承父类的 Meta 类是没有意义的。所有 Meta 选项都已应用于父类,再次应用它们通常只会导致矛盾的行为(这与抽象基类的情况相反,其中基类本身并不存在)。
因此子模型无权访问其父级的 Meta 类。但是,在少数情况下,子级从父级继承行为:如果子级没有指定 ordering 属性或 get_latest_by 属性,它将从其父级继承这些。
如果父级有排序并且您不希望子级有任何自然排序,则可以显式禁用它:
class ChildModel(ParentModel): # ... class Meta: # Remove parent's ordering effect ordering = []
创建抽象基类时,Django 使您在基类中声明的任何 Meta 内部类都可用作属性。如果子类没有声明自己的 Meta 类,它会继承父类的 Meta。如果孩子想要扩展父母的 Meta 类,它可以继承它。例如:从 django.db 导入模型
class CommonInfo(models.Model): # ... class Meta: abstract = True ordering = ['name'] class Student(CommonInfo): # ... class Meta(CommonInfo.Meta): db_table = 'student_info'
推荐阅读
- c# - 过滤自动完成列表中的数据
- javascript - 如何从组件初始化Angular服务,自定义类?
- python - 如何对里面有列表的字典进行排序?
- mysql - 在 docker-compose 中使用卷时,Mariadb 表被删除
- reactjs - 自定义 React Navigation Dark 和 Light 主题未应用于子组件
- swift - SwiftUI 从 String(Base64) 解码图像
- codeblocks - 如何在代码块中配置 msys2?
- laravel - Laravel 重定向功能似乎不适用于注销
- runtime - 试图更好地理解时间复杂度 - 相同速度的多个操作
- asp.net-core - Visual Studio 2019 .netCore 未调试