#django #django-models
#django #django-models
Вопрос:
У меня есть следующие таблицы:
class SchoolClass(models.Model):
id = models.AutoField(primary_key = True)
class_name = models.TextField()
level = models.IntegerField()
taught_by = models.ManyToManyField(User,related_name="taught_by",through='TeachSubject')
attended_by = models.ManyToManyField(User,related_name='attended_by')
class ConsentFormTemplate(models.Model):
title = models.TextField()
body = models.TextField()
teacher_id = models.ForeignKey(User)
consent_id = models.AutoField(primary_key = True)
class Meta:
db_table = "consent_form_template"
class ConsentForm(models.Model):
student_id = models.ForeignKey(User)
remarks = models.TextField()
#class_id = models.ForeignKey(SchoolClass)
reply = models.NullBooleanField()
parents_remark = models.TextField()
tpl = models.ForeignKey(ConsentFormTemplate)
acknowledged_by = models.ForeignKey(User,related_name='acknowledged_by',null=True,blank=True)
acknowledged_on = models.DateField(auto_now=True,auto_now_add=True,null=True)
date_sent = models.DateField(auto_now=True,auto_now_add =True)
class Meta:
unique_together = ('tpl_id','studentId')
class Meta:
db_table = "consent_form"
Учитывая pk consentformtemplate, как я могу построить свой запрос ORM таким образом, чтобы мои результаты были такими:
first_name(student) | class_name
Комментарии:
1. Какое first_name вы хотите? Преподавательский? Студенческий? Оба для каждого класса?
2. @arie, извини, Ари, я отредактировал свой вопрос его ученика
3. Лучше всего провести рефакторинг вашего кода. У вас есть несколько серьезных логических проблем, которые постоянно будут источником разочарования. Такие вещи, как
student_id
должны быть простоstudent
, поскольку это внешний ключ. В противном случае вы получите запросы, которые включают в себя такие вещи, какstudent_id__id
которые не имеют никакого смысла. Связанные имена также являются проблемой:related_name
следует указать обратную связь. ПоискSchoolClass
объектов черезUser
объекты учителя черезtaught_by
нелогичен.
Ответ №1:
consentformtemplate=ConsentFormTemplate.objects.get(pk=consentformtemplate_pk)
consents = ConsentForm.objects.filter(tpl=consentformtemplate).select_related()
for consent in consents:
print "%s | %s" % (consent.student_id.first_name, consent.class_id.class_name)