rad*_*ia2 5 python django pagination annotate sql-order-by
我正在对来自 manytomany 对象的时间字段进行排序,但在分页过程中遇到问题。
模型.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)
Run Code Online (Sandbox Code Playgroud)
视图.py:
results_list = Validated.objects.filter(job_id_list__user=request.user).\
distinct().order_by('-job_id_list__job_time')
Run Code Online (Sandbox Code Playgroud)
我的问题是分页搞砸了,即使查询输出正常,我的分页输出中也会出现重复项。(其他有这个问题太)
我尝试了几种解决方案,但我的问题没有得到解决,因为排序是基于多对多对象的字段 order_by('job_id_list__job_time')
我正在考虑通过annotation使用Model.Manager. 在此注释中,我尝试添加job_time模型内部函数的结果。这样, job_time 将很容易访问:
for i in result_list:
job_time_from_model = result_list[i].job_time
Run Code Online (Sandbox Code Playgroud)
我会按如下方式执行此操作,但我不知道如何将%%function logic%%内部注释合并。
这甚至可能以这种方式还是需要另一种方法?
模型.py:
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
Run Code Online (Sandbox Code Playgroud)
视图.py:
results_list = xlinkdatabase_validated.objects.get_queryset2(request.user).\
filter(job_id_list__user=request.user).distinct().order_by('-job_date')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
537 次 |
| 最近记录: |