Активация и деактивация булевых чисел Django
У меня есть первая модель под названием "Люди", которая имеет атрибут под названием "Состояние", который имеет тип Boolean, эту модель я называю в модели "День рождения". Я хочу, чтобы, когда человек неактивен в своем "State", он исчезал из модели "Birthday", а когда он снова активизируется, он появлялся в модели "Birthday".
Следует отметить, что в административной панели Django, когда я вхожу в модель "День рождения", отображаются все люди, зарегистрированные в модели "Люди", даже если они активны или нет из-за их "Состояния" (Boolean). Возможно, это можно решить с помощью условия.
class People(models.Model):
Name = models.CharField('Name', max_length = 20, blank = False, null = False)
Last_Name = models.CharField('Last Name', max_length = 20, blank = False, null = False)
State = models.BooleanField('Active Client', default = True)
class Meta:
verbose_name = 'People'
verbose_name_plural = 'People'
ordering = ['Name']
def __str__(self):
return "{0} - {1}".format(self.Name, self.Last_Name.capitalize())
class Birthday(models.Model):
People_Birthday = models.OneToOneField(People, on_delete = models.CASCADE)
BirthdayCalendar = models.DateField('Birthday', blank = False, null = False)
class Meta:
verbose_name = 'Birthday'
verbose_name_plural = 'Birthdays'
def __str__(self):
return str(self.People_Birthday)
Вы можете переопределить get_queryset
метод менеджера модели.
class BirthdayManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(People_Birthday__State=True) #Not recommended
def active(self):
return super().get_queryset().filter(People_Birthday__State=True) #Recommended
Это не рекомендуется, так как это также повлияет на админсайт. (Если вы переопределите get_queryset()
)
Вы можете создать другой метод и всегда использовать его.
Это на менеджере, но, на мой взгляд, лучше помещать такие вещи в кверисет.
class BirthdayQuerySet(models.QuerySet):
def active(self):
return self.filter(People_Birthday__State=True)
Таким образом, вы можете постоянно добавлять его к вашему набору запросов. В отличие от только менеджера, который не позволяет вам использовать метод после фильтрации, например.
С кверисетом вы все еще можете делать Birthday.objects.filter(date__range=your_date_range).active()
С менеджером, который будет ошибаться.
Чтобы использовать кверисет в вашей модели, добавьте этот атрибут к вашей модели:
objects = BirthdayQuerySet.as_manager()
Чтобы использовать modelmanager:
objects = BirthdayManager()
Вы можете использовать оба варианта, но это выходит за рамки данного вопроса.
Сиденотат:
Person - единственное число. Люди - множественное число.