Выбор в форме django

В моей форме я хочу выбрать department из двух вариантов: некоторый объект (каждый раз только один) и None.

мой form.py

class TeamGoalForm(ModelForm):
        def __init__(self, *args, **kwargs):
            employees = kwargs.pop('employees')
            department = kwargs.pop('department')

            super().__init__(*args, **kwargs)

            self.fields['employees'].queryset = employees

            #self.fields['department'].choices = [(1, department), (2, None)]
            #self.fields['department'].initial = [1]


        class Meta:
            
            model = TeamGoal
            
            fields = ('team_goal_title','department','employees', 'team_goal_description', 'gpd_year','team_factor_0','team_factor_1','team_factor_2','team_factor_3','team_factor_weight')
            
            widgets = {
                'team_goal_title':          forms.TextInput         (attrs={'class':'form-control', 'placeholder':'Enter the title of goal'}),
                'department':               forms.Select            (attrs={'class': 'form-control', 'placeholder':'Select department'}), }

В моей view.py жизни было:

if request.method == 'POST':
        form = TeamGoalForm(request.POST, employees=employees, department=department)
        if form.is_valid():
            form.save()

Здесь мой отдел является объектом.

Как реализовать что-то подобное, потому что мое решение не работает?

Вы не показываете большую часть кода, но вот более или менее то, как должны выглядеть различные файлы, надеюсь, это поможет:

**#models.py**
from django.db import models

class department(models.Model):
    # department fields
    pass

class TeamGoal(models.Models):
    ...
    deparment = models.ForeignKey(department, on_delete=models.CASCADE)
    ...

**#forms.py**
from django.forms import ModelForm
from django import forms

class TeamGoalForm(ModelForm):
        class Meta:
            model = TeamGoal
            fields = (
                'team_goal_title',
                'department',
                'employees', 
                'team_goal_description', 
                'gpd_year',
                'team_factor_0',
                'team_factor_1',
                'team_factor_2',
                'team_factor_3',
                'team_factor_weight'
                )

            deparments = deparment.objects.all()

            widgets = {
                'deparments': forms.Select(choices=deparments,
                    attrs={
                        'class': 'form-control', 
                        'placeholder':'Select department'
            })

**#views.py**
from .forms import TeamGoalForm

def AddTeamGoalForm(request):
    context = {
        'TeamGoalForm': TeamGoalForm,
     }
    if request.method == 'POST':
        addTeamGoalForm = TeamGoalForm(request.POST)
        if addTeamGoalForm.is_valid():
            newTeamGoalForm = addTeamGoalForm.save()
            return redirect('/')
    else:
        return render(request, '/TeamGoalForm.html', context)

    
**# TeamGoalForm.html**

<form method="POST">
    {% csrf_token %}

    {{ TeamGoalForm}}

    <button type="submit" class="btn btn-primary">Submit</button>
       
</form>

ПРИМЕЧАНИЕ: возможно, вам придется подкорректировать его на основе кода, который вы уже написали, но, надеюсь, это приближает к решению.

Вернуться на верх