Объект ModelForm не имеет атрибута 'fields' - PullRequest
1 голос
/ 10 марта 2020

Я использую поле django (3.0) ModelMultipleChoice для формы. Я пытаюсь изменить набор запросов, чтобы наложить на него некоторые ограничения.

вот представления:

def nouvelle_tache(request,id_livrable):
    livrable=Livrable.objects.get(pk=id_livrable)
    projet = livrable.projet
    if request.method == "POST":
        form = NouvelleTache(request.POST,projet=projet)
        tache = form.save(commit=False)
        tache.livrable = livrable
        tache.id_tache = livrable.id_derniere_tache() + Decimal(0.01)
        tache.save()
        form.save_m2m()
        etat = Temps_etat_tache(etat=form.cleaned_data['etat_initial'],tache=tache)
        etat.save()
        return redirect('tache',tache.pk)
    else:
        form = NouvelleTache(projet=projet)
    return render(request, 'application_gestion_projets_AMVALOR/nouvelle_tache.html', locals())

И формы:

class NouvelleTache(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        projet = kwargs.pop('projet', None)
        queryset = Utilisateur.objects.all()
        for utilisateur in projet.utilisateurs:
            queryset = queryset.exclude(pk=utilisateur.pk)
        self.fields['ressources'].queryset = queryset
        super(NouvelleTache, self).__init__(*args, **kwargs)

    ressources= forms.ModelMultipleChoiceField(queryset=Utilisateur.objects.all() ,widget =forms.CheckboxSelectMultiple )
    etat_initial = forms.ModelChoiceField(queryset=Etat_tache.objects.none())
    class Meta:
        model = Tache
        fields  = ['libelle']

У меня есть Ошибка followig: у объекта 'NouvelleTache' нет атрибута 'fields'

Я не понимаю, почему, поскольку многие другие пользователи, похоже, имеют похожий код, и он работает.

Любая помощь будет признательна.

1 Ответ

0 голосов
/ 10 марта 2020
super(NouvelleTache, self).__init__(*args, **kwargs)

должен быть выполнен первым, поскольку fields установлены в суперклассе:

def __init__(self, *args, **kwargs):
    projet = kwargs.pop('projet', None)
    queryset = Utilisateur.objects.all()
    for utilisateur in projet.utilisateurs:
        queryset = queryset.exclude(pk=utilisateur.pk)
    super(NouvelleTache, self).__init__(*args, **kwargs)
    self.fields['ressources'].queryset = queryset
...