[英]Getting other tables Django filter/select_related
我正在嘗試使用Django的filter和select_related來過濾值。 我可以獲取基本項目,但是無法獲取任何連接的字段。
item = Items.objects.filter(tests__company_user_id__user_id=user_id).filter(item_id=item_id).select_related("tests__company_user").values()
我的目標是從與項目相關聯的用戶獲取數據到項目退貨中。 這可能嗎?
數據模型如下所示:
class Items(models.Model):
item_id = models.CharField(primary_key=True,max_length=100)
mailed_date = models.DateTimeField()
received_date = models.DateTimeField()
last_viewed = models.DateTimeField()
dateitemsent = models.DateTimeField()
itemsent = models.CharField(max_length=25)
itemret = models.CharField(max_length=25)
dateitemret = models.DateTimeField()
status = models.CharField(max_length=25)
class Tests(models.Model):
tests_id = models.CharField(primary_key=True, unique=True, max_length=100)
teststypetest_id = models.ForeignKey(TestsType)
dateitemord = models.DateTimeField()
testdate = models.DateTimeField()
teststypetest_id = models.ForeignKey(TestsType)
dateitemord = models.DateTimeField()
testdate = models.DateTimeField()
status = models.CharField(max_length=100)
item_id = models.ForeignKey(Kits)
company_user_id = models.ForeignKey(CompanyUser)
class CompanyUser(models.Model):
user_id = models.CharField(primary_key=True,max_length=100)
username = models.CharField(max_length=254,default="empty")
sec_question_1 = models.CharField(max_length=254)
sec_answer_1 = models.CharField(max_length=254)
sec_question_2 = models.CharField(max_length=254)
sec_answer_2 = models.CharField(max_length=254)
sec_question_3 = models.CharField(max_length=254)
sec_answer_3 = models.CharField(max_length=254)
當使用select_related()時 ,要緩存聯接的對象信息,但不進行檢索,則需要顯式提取數據:
item = Items.objects.filter(tests__company_user_id__user_id=user_id).filter(item_id=item_id).select_related("tests__company_user").values("tests__company_user_id__sec_question_1", "tests__company_user_id__sec_question_2", ...)
編輯
讓我們假設你只是想從2場CompanyUser
: sec_question_1
和sec_question_2
:
from django.db.models import F
item = Items.objects.filter(tests__company_user_id__user_id=user_id).filter(item_id=item_id).select_related("tests__company_user").values().annotate(q1=F('tests__company_user_id__sec_question_1'), q2=F('tests__company_user_id__sec_question_2'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.