@nurzhannogerbek

Как ограничить выбор в СharField?

Здравствуйте! Пытаюсь решить следующие задачи и не могу найти информацию о них в официальной документации Django. В моей модели данных есть поле c типом CharField, где есть возможность выбора одного из значений установленных в choices. По умолчанию в админку выводятся все значения, которые есть в choices. Как можно вывести лишь некоторые значения или сделать недоступным для выбора некоторые значения в choices? Например: для выбора сделать недоступным значения ''manager" и "singer". Также меня интересует как добиться такого же поведения в простой форме.

admin.py
class MembershipInline(admin.TabularInline):
    model = Membership
    extra = 1


class MembershipAdmin(admin.ModelAdmin):
    form = MembershipAdminForm
    inlines = (MembershipInline,)
    prepopulated_fields = {'slug': ('name',)}

admin.site.register(Group, MembershipAdmin)


forms.py
class MembershipAdminForm(forms.ModelForm):
    class Meta:
        model = Membership
        fields = '__all__'

    def __init__(self, *args, **kwargs):
        super(MembershipAdminForm, self).__init__(*args, **kwargs)
        self.fields['role'].choices = tuple(choice for choice in ROLE_CHOICES if choice[0] not in ['manager', 'singer'])


models.py
class Group(models.Model):
      ***FIELDS***
      members = models.ManyToManyField(User, through='Membership')

ROLE_CHOICES = (
        ('singer', 'Singer'),
        ('musician', 'Musician'),
        ('manager', 'Manager'),
        ('guitarist', 'Guitarist'),
)

class Membership (models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    group= models.ForeignKey(Group, on_delete=models.CASCADE)
    role = models.CharField(max_length=20, choices=ROLE_CHOICES,)
  • Вопрос задан
  • 232 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы