django forms exclude values from choicefield

12 views
Skip to first unread message

Muhammad Mahir

unread,
Jan 6, 2020, 1:08:40 AM1/6/20
to Django users

I want to exclude those options from the ChoiceField in the forms that has been already selected and are into the database. Below is the Code.

models.py

SEMESTER_CHOICES = (
    ("1", "1"),
    ("2", "2"),
    ("3", "3"),
    ("4", "4"),
    ("5", "5"),
    ("6", "6"),
    ("7", "7"),
    ("8", "8"),
)
class Publish(models.Model):
    dates = models.CharField(max_length=255, choices = SEMESTER_CHOICES)

    def __str__(self):
        return self.dates

form.py


SEMESTER_CHOICES = (
    ("1", "1"),
    ("2", "2"),
    ("3", "3"),
    ("4", "4"),
    ("5", "5"),
    ("6", "6"),
    ("7", "7"),
    ("8", "8"),
)

class PublishForm(forms.ModelForm):


    def __init__(self, **kwargs):
        super(PublishForm, self).__init__(self, **kwargs)
        selected_choices = [i.dates for i in Publish.objects.all()]
                self.fields['dates'].choices = ({(k, v) for k, v in SEMESTER_CHOICES
                                             if k not in selected_choices})

    class Meta:
        model = Publish
        fields = ['dates']

view.py

def add(request):
    if request.method == 'POST':
        form = PublishForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('mainapp:add')
    else:
        form = PublishForm()

    context = {
        'form' : form
    }
    return render(request, 'mainapp/add.html', context)

What am I doing wrong? Ive followed these 2 links here. link1 and link2. Any suggestions please.

Also I am getting the error : 'PublishForm' object has no attribute 'get'

Thank you

Reply all
Reply to author
Forward
0 new messages