2
我正在嘗試創建一個管理器,該管理器擁有一個'active_or_users'方法來檢索所有活動的帳戶或用戶已創建的帳戶。活動帳戶的開始日期既可以是今天,也可以是過去的某個地方,結束日期是未來的某個地方。現在,active_or_users方法可以工作,但它會返回同一對象的重複項。它返回用戶創建的活動作業的三個副本。這並不理想。Django Q錯誤的查詢邏輯
from django.db.models import Q
from django.db import models
from django.contrib.auth.models import User
class ActiveJobs(models.Manager):
def active(self):
return super(ActiveJobs, self).get_query_set().\
filter(publications__publish_on__lte=date.today(),
publications__end_on__gt=date.today())
def active_or_users(self, user):
return super(ActiveJobs, self).get_query_set().\
filter((Q(publications__publish_on__lte=date.today()) &
Q(publications__end_on__gt=date.today())) | Q(creator=user))
class Job(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(blank=True, null=True)
creator = models.ForeignKey(User)
objects = ActiveJobs()
class JobPublicationRecord(models.Model):
job = models.ForeignKey('Job', related_name='publications')
publish_on = models.DateField(auto_now=False)
end_on = models.DateField(auto_now=False, auto_now_add=False,
blank=True, null=True)
有您嘗試使用[distinct](https://docs.djangoproject.com/en/1.6/ref/models/querysets/#django.db.models.query.QuerySet.distinct)方法? – tutuDajuju
我沒有。我相信這會起作用。我只是困惑爲什麼我三次得到同一個對象? – user2734679
由於每個查詢都會返回一個實例。 I.e:如果Job實例是由用戶創建的,並且該作業的另一個實例(如果在指定的日期範圍內)。 – tutuDajuju