Вопрос

I have 2 models like such:

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)

I'm trying to get all volunteers as well as their assignment. The following works:

volunteers = Volunteer.objects.all().order_by('last_name')
for volunteer in volunteers:
    assignment = Assignment.objects.get(volunteer=volunteer)
    volunteer.assignment = assignment

But is there a more Django way of doing it?

Это было полезно?

Решение

In your current model structure, each volunteer can have multiple assignments. So there is no such thing as "the" assignment for a volunteer. Perhaps you meant to use a OneToOneField instead of a ForeignKey, in which case you would automatically get an "assignment" accessor from Volunteer, making your loop redundant.

Другие советы

You can get all assignements of volunteer by using FOO_set, more here in docs:

volunteer.assignement_set.all()
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top