【问题标题】:Reorganizing ManyToMany models into a different order将 ManyToMany 模型重组为不同的顺序
【发布时间】:2020-04-30 18:20:52
【问题描述】:

我有一个类似的设置。

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    books = models.ManyToManyField(Book)

    def __unicode__(self):
        return self.title

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.ForeignKey(Author)

    def __unicode__(self):
        return self.title

现在在我的管理面板中,我可以选择一位作者并在该特定作者下方添加书籍。当我打印出每个作者的所有书籍时,它会按照它们在管理面板中添加的顺序打印它们。

是否可以在管理面板中修改顺序,以便在打印时按照管理面板的顺序打印?

admin.py

@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
    pass

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    pass

【问题讨论】:

    标签: python django python-3.x django-models django-views


    【解决方案1】:

    您可以在每个模型中添加一个具有排序属性的 Meta 类,以按特定顺序获取项目。

    class Book(models.Model):
        ...
        class Meta:
            ordering = ['author']
    

    也许对你有帮助。

    【讨论】:

    • 是否可以在管理面板中设置订购?这样做我必须知道要添加什么。所以如果我给作者添加了 10 本书,我需要去 models.py 并指定确切的顺序。
    【解决方案2】:

    据我了解,如果正确,您可以将 TabularInline 用于书籍,因此您只需要创建一个名为 get_queryset 的简单函数

    def get_queryset(self, request):
        return super(BookInlineAdmin, self).get_queryset(request).order_by('YOURFIELD')
    
    

    【讨论】:

    • 我不知道在哪里或如何使用它。我基本上想在管理面板中打开 Book。我仍然是我所有书籍的清单。然后我想按照我想要的任何顺序重新排列它们。
    • 请分享您的 admin.py 文件
    • 添加了 admin.py 文件
    • 好的,所以将此函数添加到 Books 类 ``` def get_queryset(self, request): return super(BookAdmin, self).get_queryset(request).order_by('YOURFIELD') ```
    • 所以这样做只会给我按字母顺序排列的项目列表。但上面的答案实际上是按字母顺序重新定位所有内容。
    猜你喜欢
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    相关资源
    最近更新 更多