0

我有一个看起来像这样的 django 模型:

class Definition
    name = models.CharField(max_length=254)
    text = models.TextField()

如果我执行以下查询:

animal = Definition.objects.get(name='Owl')

如果我的数据库中有以下带有这些名称的定义:

Elephant, Owl, Zebra, Human

有没有一种方法可以根据模型中字段的animal字母顺序显示基于对象的上一个和下一个定义的 django 查询?name

我知道有一些方法可以根据datetime字段获取上一个/下一个,但我对这种情况不太确定。

4

2 回答 2

5

我不知道在少于三个查询中执行此操作的任何方法。

target = 'Owl'
animal = Definition.objects.get(name=target)
previous_animal = Definition.objects.order_by('name').filter(name__lt=target)[0]
next_animal = Definition.objects.order_by('name').filter(name__gt=target)[0]
于 2012-09-30T19:44:07.653 回答
0

如果有人像我一样遇到这种情况...

这是我的解决方案...它也会循环(因此,如果在最后一项上,它将第一项显示为下一项,如果在第一项上将最后一项显示为上一项)


    def get_previous_by_title(self):
        curr_title = self.get_object().title
        queryset = self.my_queryset()
        try:
            prev = queryset.filter(title__lt=curr_title).order_by("-title")[0:1].get()
        except Video.DoesNotExist:
            prev = queryset.order_by("-title")[0:1].get()
        return prev

    def get_next_by_title(self):
        curr_title = self.get_object().title
        queryset = self.my_queryset()
        try:
            next = queryset.filter(title__gt=curr_title).order_by("title")[0:1].get()
        except Video.DoesNotExist:
            next = queryset.order_by("title")[0:1].get()
        return next

我有基于用户级别的自定义查询集,因此可以将查询集设置为普通查询集,例如... Video.objects.all() 但是在任何地方我重复代码不止一次我创建一个函数

于 2020-08-26T03:57:11.870 回答