我正在使用django 1.4并陷入这样一种情况:我必须从数据库中检索记录而不使用 For loop 。
情况如下:
人物模型(表1)
class Person(models.Model):
first_name = models.CharField(max_length=100, blank=True, default='')
middle_name = models.CharField(max_length=100, blank=True, default='')
last_name = models.CharField(max_length=100, blank=True, default='')
full_name = models.CharField(max_length=255, blank=True, default='')
degree = models.CharField(max_length=100, blank=True, default='')
email = models.EmailField(blank=False, unique=True)
PersonNominationProfile模型(表2)
class PersonNominationProfile(models.Model):
person = models.ForeignKey('Person', null=False, blank=False, related_name='nomination_profile')
person_type = models.ForeignKey('PersonType', default=None, null=True)
status = models.ForeignKey(SpeakerStatus, related_name='status_nomination_profiles', blank=True, null=True, default=None)
tier = models.ForeignKey('PersonTier', related_name='tier_nomination_profiles', default=None, null=True, blank=True)
series = models.ForeignKey(Series, null=False, blank=False)
year = models.IntegerField(null=True)
PersonCertification模型(表3)
class PersonCertification(models.Model):
nomination_profile = models.OneToOneField('PersonNominationProfile',null=False, blank=False)
background_check_sent_date = models.DateField(auto_now_add=False,null=True)
debarment_check_completed_date = models.DateField(auto_now_add=False,null=True)
license_check_completed_date = models.DateField(auto_now_add=False,null=True)
所以我正在从Person
表中检索记录及其相关数据来自PersonNominaionProfile
但无法从PersonCertification
获取数据。
我希望在不使用for循环的情况下从PersonCertification
获取记录。
我试过这个
all_speakers = Person.objects.filter(nomination_profile__person_type__name='Speaker')\
.values('id','nomination_profile__series_id', 'nomination_profile__series__name',
'last_name', 'first_name', 'middle_name', 'degree', 'email'))
这会提供与PersonNominationProfile
相关的所有内容但是我如何从PersonCertification
获取记录。
请告诉我一个优化的解决方案。
答案 0 :(得分:0)
由于您在OneToOneField
上定义了PersonCertification
,因此您应该可以通过personcertification
上的PersonNominationProfile
字段访问反向关系。如果您使用现有查询但添加,例如:
'nomination_profile__personcertification__background_check_sent_date'
到values()
的参数,你应该得到你想要的东西。