Ryan Detzel
Ryan Detzel

Reputation: 5599

How can I filter objects when building a form from a model in Django?

class TriggerForm(ModelForm):
    class Meta:
        model = Trigger

class Trigger(models.Model):
    account = models.ForeignKey(Account)
    name = models.CharField(max_length=255)
    schedule = models.ForeignKey(Schedule)

    def __unicode__(self):
        return self.name

When the trigger form is shown I only want to show schedule items that are for the logged in account but instead it shows me all schedule objects.

Upvotes: 1

Views: 54

Answers (1)

Brandon Taylor
Brandon Taylor

Reputation: 34553

You can pass in the request as an argument to the TriggerForm and then use that to filter the Schedule...

class TriggerForm(ModelForm):
    class Meta:
        model = Trigger

    def __init__(self, request=None, *args, **kwargs):
        super(TriggerForm, self).__init__(*args, **kwargs)

        self.fields['schedule'] = forms.ModelChoiceField(queryset=Schedule.objects.filter([your filter here based on the logged in user]))


#views.py

from my_app.forms import TriggerForm

def my_view(request):
    form = TriggerForm(request, request.POST or None)
    # and so on

Hope that helps you out.

Upvotes: 2

Related Questions