سؤال

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