簡體   English   中英

Django REST API - 在查詢中加入多個表

[英]Django REST API - Joining multiple tables in a query

我的目標是獲取所有 EmployeeQuestions,這樣員工就有一個具有給定 id (request.user.pk) 的雇主。 更正式地說,我想獲取所有 EmployeeQuestions ,其中 question 有一個課程,其中雇主 ID 是給定的 ID。

我希望這是有道理的。 基本上作為雇主,我想檢索所有員工的所有問題進度。

我以為我做了正確的查詢,但它只返回所有 EmployeeQuestions:

EmployeeQuestion.objects.filter(question__in=CourseQuestion.objects.filter(course__in=Course.objects.filter(employer_id=request.user.pk)))

這里有任何 Django 查詢天才可以幫助我嗎? :)

看法

class EmployeeQuestionByEmployerId(viewsets.ModelViewSet):
    queryset = EmployeeQuestion.objects.all()
    serializer_class = EmployeeQuestionSerializer

    def list(self, request):
        queryset = EmployeeQuestion.objects.all()
        if request.query_params:
            queryset = EmployeeQuestion.objects.filter(question__in=CourseQuestion.objects.filter(course__in=Course.objects.filter(employer_id=request.user.pk)))

        serializer = EmployeeQuestionSerializer(queryset, many=True)
        return Response(serializer.data)

楷模

class CustomUser(AbstractBaseUser):
    username        = ...
    employer        = models.ForeignKey("self", blank=True, null=True, on_delete=models.CASCADE)
    
class Course(models.Model):
    employer_id     = models.ForeignKey(CustomUser, on_delete=models.CASCADE, null=True)
    title           = models.CharField(max_length=255, blank=False, null=False)

class Question(models.Model):
    course          = models.ForeignKey(Course, on_delete=models.CASCADE, null=False)
    question        = models.CharField(max_length=255, blank=False, null=False)
    question_type   = models.CharField(max_length=255, blank=False, null=False) # mult/ord/open
    
class EmployeeQuestion(models.Model):
    employee        = models.ForeignKey(CustomUser, on_delete=models.CASCADE, null=True)
    question        = models.ForeignKey(CourseQuestion, on_delete=models.CASCADE, null=False)
    passed          = models.BooleanField(default=False)

您可以在雙下划線的幫助下過濾外鍵模型的屬性,如下所示:

EmployeeQuestion.objects.filter(question__course__employer_id=request.user.pk)

它將在數據庫級別內部自動執行內部聯接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM