Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从父表-Django中的ORM查询中获取所有外键_Django_Django Models_Django Orm - Fatal编程技术网

从父表-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()