안녕하세요. 상당히 복잡한 쿼리를 수행해야합니다. 그리고 어떤 점에서 장고가 객체를 반환하도록 관리 할 수 있지만 일부는 복제됩니다.django에서 내부 조인을 사용하는 방법
모델은 ProjectType, ProjectIdea입니다. 회사에서 시작할 수있는 데이터베이스에서 프로젝트 유형을 선택해야합니다. 각 회사는 아이디어가 있고 특허를받지 않은 프로젝트를 시작할 수 있습니다. 특허가 만료되면 아이디어가 없어도 시작할 수 있습니다.
class ProjectType(models.Model):
patent_expires = models.DateTimeField(null=True)
patent_owner = models.ForeignKey(Company,null=True)
#This really is just MtoN relationship
class ProjectIdea(models.Model):
project = models.ForeignKey(ProjectType)
company = models.ForeignKey(Company)
나는 다음과 같은 쿼리를 시도 : 나는 여러 많은 변화를 시도
#problem is that ProjectType(s), where patent expired and the company has idea for is returned twice
models.ProjectType.objects.filter(Q(projectidea__company=request.user.company) | Q(patent_expires__lt=timezone.now()))
#doesn't return projects where patent is expired and idea exists
models.ProjectType.objects.filter(Q(projectidea__company=request.user.company),(Q(patent_owner__isnull=True) | Q(patent_owner=request.user.company))).filter(Q(patent_expires__lt=timezone.now()) | Q(patent_owner__isnull=True))
#returns only the projects where patent expired and idea exists. Omits the not patented projects, where idea exists
q = models.ProjectType.objects.filter(Q(patent_expires__lt=timezone.now()) | Q(patent_owner=request.user.company)).filter(projectidea__company=request.user.company,patent_owner__isnull=True)
.distinct() #has no effect what so ever
을,하지만 난 그것을 제대로 작성하는 방법을 알아낼 수 없습니다. 나는 또한 .exclude()로만 접근을 시도했지만 Q (...) & Q (...)를 사용할 수 없어 표현이 불가능 해 보입니다.
아이디어가 있으십니까?
첫 번째 쿼리에서'projectidea__company' 대신'patent_owner__company'가 아니 었습니까? – karthikr
'business'가 맞는지 확실하지 않습니다. 그러나 아이디어는 회사가 첫 번째 프로젝트를 시작한 후에야 특허를 얻습니다. –