Условный булев атрибут в Django

Я хочу иметь BooleanField private в моих моделях для моего проекта, но я хочу показывать это только если другое поле имеет определенное значение.

Это моя модель:

class Scope(models.TextChoices):
    COMPANY = 'company', _("Company")
    TEAM = 'team', _("Team")
    INDIVIDUAL = 'individual', _("Individual")

class Objective(models.Model):
    name = models.CharField(max_length=500, verbose_name=_("name"))
    scope = models.TextField(_("Scope"), max_length=15, choices=Scope.choices, db_index=True, default=Scope.TEAM)
    is_private = models.BooleanField(default=False, verbose_name=_("private"))


    def __str__(self):
        return self.name

Теперь я хочу показывать в форме только поле BooleanField is_private, когда область действия Objective будет INDIVIDUAL. Как я могу это сделать?

вы можете удалить свое поле при инициализации формы, когда экземпляр присутствует с хорошим значением scope:

class YourForm(forms.ModelForm):

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

        instance = kwargs.get("instance")
        if not instance or instance.scope != Scope.INDIVDUAL:
            self.fields.pop("is_private")

    class Meta:
        model = Objective
        fields = ("name", "scope", "is_private")
Вернуться на верх