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 № 1Desde 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.