Question

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?

Était-ce utile?

La solution

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.

Autres conseils

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

volunteer.assignement_set.all()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top