首页 > 解决方案 > exclude option in selectField (ForeignKey)

问题描述

i have a user field in my model,

class result(models.Model):
    id = models.AutoField(primary_key=True)
    created_at = models.DateTimeField(auto_now_add=True)
    doc_analis = models.BooleanField(blank=True, default=False)
    user = models.ForeignKey(MyUsers, on_delete=models.SET_NULL, null=True, blank=True)

in database table "MyUsers" - 10 users.

How to exclude some of this 10 users from choise option in form (by id or name)?

form (view.py)

class ResultNew(CreateView):
    model = result
    fields = '__all__'
    def get_form(self, form_class=None):
        form = super().get_form(form_class)
        form.helper = FormHelper()
        form.helper.add_input(Submit('submit', 'Create', css_class='btn-primary'))
        form.fields['doc_change'].label = "Change"
        form.fields['doc_analis'].label = "Analysis"
        form.fields['user'].label = "Username"  # FK (10 users) 
        return form

标签: djangodjango-modelsdjango-forms

解决方案


您需要覆盖 Forminit方法以从下拉列表中排除用户。我在这里假设您要排除不是的用户active,但您可以根据您的条件排除用户。

from django import forms
class MyForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['myuser'].queryset = self.fields['myuser'].queryset.exclude(is_active=False)

推荐阅读