1

I have a model like this:

class Package(models.Model):
    package_name = models.CharField(max_length=200)
    package_price = models.IntegerField()

class UserPackage(models.Model):
    user = models.ForeignKey(User)
    package = models.ForeignKey(Package)

ModelForm like this:

class UserPackageForm(ModelForm):
    class Meta:
        model = UserPackage
        exclude = ['user']

I want to list the packages excluding Free that's why I am doing like this:

def __init__(self, *args, **kwargs):
            super(UserPackageForm, self).__init__(*args, **kwargs)
            self.fields['package'].queryset = Package.objects.exclude(package="Free")

It is showing Free package too. What's wrong?

pynovice
  • 7,424
  • 25
  • 69
  • 109
  • Possible duplicate of [filtering dropdown values in django admin](https://stackoverflow.com/questions/6581520/filtering-dropdown-values-in-django-admin) – P. de Boer Aug 07 '18 at 09:14

2 Answers2

3

exclude argument is wrong, try package_name instead of package.

from django.forms.models import BaseModelFormSet

class UserPackageForm(ModelForm):
     def __init__(self, *args, **kwargs):
            super(UserPackageForm, self).__init__(*args, **kwargs)
            self.fields['package_name'].queryset = self.fields['package_name '].queryset.exclude(package_name="Free")
Bradia
  • 827
  • 5
  • 8
  • also make a change to __init__ function. use self.queryset – Bradia Nov 29 '13 at 05:05
  • hopfully the last change I made will do the trick.self.fields['package_name'].queryset = self.fields['package_name '].queryset.exclude(package_name="Free") – Bradia Nov 29 '13 at 05:35
1

Try this
self.fields['package'].queryset = Package.objects.exclude(package__name="Free")

Arpit
  • 953
  • 7
  • 11