Условный булев атрибут в 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")