簡體   English   中英

如何在Django中使用多個外鍵聯接表並獲取過濾后的數據?

[英]How to join tables with multiple foreign keys and get filtered data in Django?

我有兩個這樣的模型:

class Question(models.Model):
        ques_id = models.IntegerField()
        test_id = models.ForeignKey('exam.Test')
        ques = models.TextField()

class UserAnswer(models.Model):
        user = models.ForeignKey('exam.User')
        test_id = models.ForeignKey('exam.Test')
        ques_id=models.ForeignKey('exam.Question')
        user_ans = models.TextField()

我需要執行此查詢以獲取正確的“ ques”字段值。

SELECT A.ques_id, B.ques, A.user_ans FROM useranswer A
inner join question B on B.ques_id= A.ques_id and B.test_id =A.test_id
WHERE A.user_id=1 and B.test_id='101'

到目前為止,我已經做了:

UserAnswer.objects.filter(test_id=test_id, user_id=user_id).values('ques_id', 'ques_id__ques','user_ans')

但是它沒有返回正確的“ ques”字段值,因為它沒有考慮B.test_id = A.test_id部分。 如何找回它???

首先,您的字段名稱具有誤導性。 不要后綴外鍵的字段_id 將它們作為屬性訪問將返回模型實例,而django提供了_id后綴的屬性以隱式訪問實際的鍵:

class Question(models.Model): 
    test = models.ForeignKey('exam.Test')
    ques = models.TextField()
    # is this supposed to be the primary key? Don't do that
    # ques_id = models.IntegerField() 

class UserAnswer(models.Model):
    user = models.ForeignKey('exam.User')
    ques = models.ForeignKey('exam.Question')
    user_ans = models.TextField()
    # This is redundant as ques belongs to a test already
    # test = models.ForeignKey('exam.Test')  

我假設您想獲得一位用戶和一項測試的所有答案:

UserAnswer.objects.filter(
    ques__test_id=test_id, 
    user_id=user_id
).values('ques_id', 'ques__ques', 'user_ans')

暫無
暫無

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

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