Django 模型根据与用户 FK 配置文件相关的布尔字段 True/False 对查询集进行排序

Django model order the queryset based on booleanfield True/False that related with User FK profile

我有两个django模型如下:

第一个是用户配置文件,它有一个 FK to User 模型:

class Profile(models.Model):
    PRF_user = models.OneToOneField(User, related_name='related_PRF_user', on_delete=models.CASCADE)
    PRF_Priority_Support = models.BooleanField(default=False)

第二个是票模型,它有一个 FK 到用户模型:

class ticket(models.Model):
    ticket_status_options = [
        ('open', 'open'),
        ('wait_customer_reply', 'wait_customer_reply'),
        ('replied_by_staff', 'replied_by_staff'),
        ('replied_by_customer', 'replied_by_customer'),
        ('solved', 'solved'),
    ]

    TKT_USER = models.ForeignKey(User, related_name='TKT_USER', on_delete=models.CASCADE)
    TKT_DEB = models.ForeignKey('Site_departments', related_name='related_ticket_department', on_delete=models.CASCADE)
    TKT_SUB = models.CharField(max_length=50, db_index=True, verbose_name="ticket subject")
    TKT_BOD = models.TextField(verbose_name="ticket body")
    TKT_image_attachment = models.ImageField(upload_to='TKT_img_attachment', blank=True, null=True , default=None)
    TKT_CREATED_DATE = models.DateTimeField(auto_now_add=True)
    TKT_UPDATED_DATE = models.DateTimeField(auto_now=True)

我想根据用户个人资料对工单进行排序Priority_Support:

如果用户配置文件 PRF_Priority_Support 为 True,我想先在我的视图 QuerySet 中对其进行排序,否则(如果 PRF_Priority_Support 为 False)我想对其进行正常排序。

我该怎么做?

您好,您应该按以下方式过滤:

Model.objects.filter(field=True) 或 False 取决于您的需要

此致

您应该以大写字母开头命名您的模型。

对于订购门票,您可以使用如下方式:

 ' queryset_list = ticket.objects.order_by('-TKT_USER__related_PRF_user__PRF_Priority_Support') 

在过滤中,当你想跨越关系时,你使用双下划线__。

这里有更多相关信息: https://docs.djangoproject.com/en/3.1/topics/db/queries/#lookups-that-span-relationships

另一种方法是向模型的元数据添加排序 class。

例如:

MyModel(models.Model):
    class Meta:
        ordering = ('-my_boolean_field ',)