Как реализовать поле выбора в модели django? - PullRequest
0 голосов
/ 09 марта 2020

Я хочу разработать приложение для голубей в django, и моя модель голубей имеет поле состояния. Для этого я должен определить другую модель с именем Status, где будут храниться мои статусы.

Моя модель

class PigeonStatus(models.Model):
    STATUSES = [
        ('Activ', 'Activ'),
        ('Lost', 'Lost'),
        ('Dead', 'Dead'),
        ('For Sale', 'For Sale')
        ]

    status = models.CharField(max_length=15, choices=STATUSES, unique=True)
    in_loft = models.BooleanField('In loft?')

    def __str__(self):
    return self.status

class Pigeon(models.Model):
    pigeon_id = models.AutoField(primary_key=True)
    year = models.CharField(max_length=4, null=False, blank=False)
    band = models.CharField(max_length=25, null=False, blank=False, unique=True)
    ...
    status = models.ForeignKey(PigeonStatus, on_delete=models.CASCADE, null=False, blank=False)

Мой вопрос: как я могу установить логическое значение для каждого статуса? Я хочу запросить вот так: Pigeon.status.in_loft = true. Из вариантов, Activ и For Sale должны иметь in_loft=True, а Lost, Dead должны иметь in_loft=False. Кто-нибудь может ответить на это? Есть ли другой способ (может быть, лучше) установить статус голубя и обратиться к нему позже? Спасибо!

1 Ответ

1 голос
/ 09 марта 2020

Поскольку значение in_logt зависит от значения поля status вашей модели PigeonStatus, создавать поле in_loft не нужно. Лучшим способом Pythoni c является использование собственного метода (с декоратором свойств) в вашем PigeonStatus для получения значений для in_logt. Затем вы можете вызвать in_loft из экземпляра PigeonStatus, как вы предложили.

Вот пример кода:

class PigeonStatus(models.Model):
    STATUSES = [
        ('Activ', 'Activ'),
        ('Lost', 'Lost'),
        ('Dead', 'Dead'),
        ('For Sale', 'For Sale')
        ]

    status = models.CharField(max_length=15, choices=STATUSES, unique=True)

    @property
    def in_loft(self):
        return self.status == 'Activ' or self.status == 'For Sale'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...