从父表-Django中的ORM查询中获取所有外键
我有两个这样的模型:从父表-Django中的ORM查询中获取所有外键,django,django-models,django-orm,Django,Django Models,Django Orm,我有两个这样的模型: class Volunteer(models.Model): first_name = models.CharField(max_length=50L) last_name = models.CharField(max_length=50L) address = models.CharField(max_length=100L) city = models.CharField(max_length=100L) state = mode
class Volunteer(models.Model):
first_name = models.CharField(max_length=50L)
last_name = models.CharField(max_length=50L)
address = models.CharField(max_length=100L)
city = models.CharField(max_length=100L)
state = models.CharField(max_length=2L)
zip = models.CharField(max_length=5L)
skype = models.CharField(max_length=50L)
email = models.CharField(max_length=50L)
age = models.IntegerField(max_length=2L)
phone_mobile = models.CharField(max_length=50L)
phone_home = models.CharField(max_length=50L)
gender = models.CharField(max_length=1)
class Assignment(models.Model):
volunteer = models.ForeignKey(Volunteer)
department = models.ForeignKey(Department)
role = models.ForeignKey(Role)
location = models.CharField(max_length=100L, blank=True, null=True)
我正在努力让所有的志愿者和他们的任务。以下工作:
volunteers = Volunteer.objects.all().order_by('last_name')
for volunteer in volunteers:
assignment = Assignment.objects.get(volunteer=volunteer)
volunteer.assignment = assignment
但是有没有比Django更适合的方法呢?在您当前的模型结构中,每个志愿者都可以有多个作业。因此,对于志愿者来说,没有所谓的“任务”。也许您打算使用OneToOneField而不是ForeignKey,在这种情况下,您将自动从志愿者那里获得一个“分配”访问器,从而使您的循环变得多余。您可以通过使用FOO\u set获得志愿者的所有分配,更多信息:
有道理。非常感谢。如何反映
OneToOneField
?我会在作业
中做志愿者=models.OneToOneField(志愿者)
,还是在志愿者
中做相反的事?有什么区别吗?没有,没有真正的区别——这取决于你想把信息存储在哪里。由于您的外键正在执行任务,您最好将新字段保留在那里。
volunteer.assignement_set.all()