Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django在多个字段上使用order_by()分页重复_Python_Django_Pagination_Sql Order By_Annotate - Fatal编程技术网

Python django在多个字段上使用order_by()分页重复

Python django在多个字段上使用order_by()分页重复,python,django,pagination,sql-order-by,annotate,Python,Django,Pagination,Sql Order By,Annotate,我正在对来自多个对象的时间字段上的查询进行排序,但在分页过程中遇到问题 models.py: class Validated(models.Model): job_id_list = models.ManyToManyField(JobId , related_name='JobId', blank=True) class JobId(models.Model): user = models.ForeignKey(User, blank=True, null=True, d

我正在对来自多个对象的时间字段上的查询进行排序,但在分页过程中遇到问题

models.py:

class Validated(models.Model):
    job_id_list = models.ManyToManyField(JobId , related_name='JobId', blank=True)  

class JobId(models.Model):
    user = models.ForeignKey(User, blank=True, null=True, default=None)
    job_time = models.DateTimeField(auto_now_add=True)
class ValidatedManager(models.Manager):      
    **%%function-logic%%**
    def date(self, user, id):
            xlinkdatabase_validated_object = self.get(id=id)
            job_id_list = xlinkdatabase_validated_object.\
                    job_id_list.all().order_by('-job_time')
            date_added = None
            for item in job_id_list:
                if item.user == user:
                    date_added = item.job_time
                    break
                return date_added

    def get_queryset2(self, user):
        qs = super(XlinkdatabaseValidatedManager, self).\
        get_queryset().annotate(job_date= **%%function-logic%%**, output_field=DateTimeField())
        return qs
views.py:

results_list = Validated.objects.filter(job_id_list__user=request.user).\
               distinct().order_by('-job_id_list__job_time')
results_list = xlinkdatabase_validated.objects.get_queryset2(request.user).\
    filter(job_id_list__user=request.user).distinct().order_by('-job_date')
我的问题是分页被弄乱了,我在分页输出中得到了重复项,即使查询输出正常。(有问题)

我尝试了几种解决方案,但我的问题没有得到解决,因为排序是基于多对多对象的字段
order\u by('job\u id\u list\u job\u time')

我正在考虑通过使用
model.Manager
为我的模型创建
注释
来解决问题。在这个注释中,我尝试添加
job\u time
,这是模型内部函数的结果。这样,工作时间就很容易获得:

for i in result_list:
    job_time_from_model = result_list[i].job_time
我会按照下面的方法进行操作,但是我不知道如何将
%%函数逻辑%
合并到注释中。

这样做是可能的还是需要另一种方法

models.py:

class Validated(models.Model):
    job_id_list = models.ManyToManyField(JobId , related_name='JobId', blank=True)  

class JobId(models.Model):
    user = models.ForeignKey(User, blank=True, null=True, default=None)
    job_time = models.DateTimeField(auto_now_add=True)
class ValidatedManager(models.Manager):      
    **%%function-logic%%**
    def date(self, user, id):
            xlinkdatabase_validated_object = self.get(id=id)
            job_id_list = xlinkdatabase_validated_object.\
                    job_id_list.all().order_by('-job_time')
            date_added = None
            for item in job_id_list:
                if item.user == user:
                    date_added = item.job_time
                    break
                return date_added

    def get_queryset2(self, user):
        qs = super(XlinkdatabaseValidatedManager, self).\
        get_queryset().annotate(job_date= **%%function-logic%%**, output_field=DateTimeField())
        return qs
views.py:

results_list = Validated.objects.filter(job_id_list__user=request.user).\
               distinct().order_by('-job_id_list__job_time')
results_list = xlinkdatabase_validated.objects.get_queryset2(request.user).\
    filter(job_id_list__user=request.user).distinct().order_by('-job_date')