/ / Precisa recuperar registros da Tabela3 com relacionamento Tabela1 - (OneToMany) -> Tabela2 - (OneToOne) -> Tabela3 - django, django-models, django-queryset

Necessidade de recuperar registros da Tabela3 com o relacionamento Tabela1 - (OneToMany) -> Tabela2 - (OneToOne) -> Tabela3 - django, django-models, django-queryset

Estou usando o Django 1.4 e estou preso em uma situação em que tenho que recuperar os registros do banco de dados sem usar Para loop.

Aqui está o caso:

Modelo de pessoa (Tabela 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 Model (Tabela 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)

Modelo de certificação de pessoa (Tabela 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)

Estou recuperando registros de Person tabela e seus dados relacionados de PersonNominaionProfile Mas não é possível obter dados de PersonCertification.

Eu quero obter registros de PersonCertification sem usar um loop for.

Eu tentei isso

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"))

Isso dá tudo relacionado a PersonNominationProfile Mas como eu obteria registros de PersonCertification Além disso.

Por favor, deixe-me saber uma solução otimizada.

Respostas:

0 para resposta № 1

Desde que você definiu um OneToOneField em PersonCertification, você deve ser capaz de acessar o relacionamento reverso por meio do personcertification campo em PersonNominationProfile. Se você usar sua consulta existente, mas adicionar, por exemplo:

"nomination_profile__personcertification__background_check_sent_date"

para os argumentos para values(), você deve conseguir o que deseja.