Python 获取其他表Django filter/select_related
我正在尝试使用Django的过滤器过滤值,并选择_related。我可以获取基本项,但无法获取任何关联字段Python 获取其他表Django filter/select_related,python,django,Python,Django,我正在尝试使用Django的过滤器过滤值,并选择_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
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)
当您使用缓存连接的对象信息但不检索时,需要显式提取数据:
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", ...)
编辑
假设您只需要CompanyUser
中的两个字段:secu-question\u 1
和secu-question\u 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'))
当您使用缓存连接的对象信息但不检索时,需要显式提取数据:
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", ...)
编辑
假设您只需要CompanyUser
中的两个字段:secu-question\u 1
和secu-question\u 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'))
值不应该检索数据吗?
.values()
将检索项
对象的数据,因为您正在查询项
表。如何检索项对象以及用户对象的数据?对于这两种模型,我是否必须在select_related()中手动输入每个字段?不,您可以使用annotate。我将更新答案。您的更新不会返回任何与项目相关的数据。我需要项数据和用户数据。值不应该检索数据吗?。values()
将检索项
对象的数据,因为您正在查询项
表。如何检索项对象和用户对象的数据?对于这两种模型,我是否必须在select_related()中手动输入每个字段?不,您可以使用annotate。我将更新答案。您的更新不会返回任何与项目相关的数据。我需要项目数据和用户数据。