Frage

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?

War es hilfreich?

Lösung

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.

Andere Tipps

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

volunteer.assignement_set.all()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top