Получите ярлык из моих вариантов в моем views.py - Django - PullRequest
0 голосов
/ 08 мая 2020

У меня есть модель, в которой одно из полей - назначенный цвет.

class Gateway(models.Model):
    colors = (
        ('0','Black'), ('1','White'), ('2','Blue'), ('3','Red'),
        ('4','Green'), ('5','Brown'), ('6','Grey'), ('7','Pink'),
        ('8','Purple'), ('9','Orange'), ('10','Yellow'),('11','Darkolive'),
        ('12','Lightpink'),('13','Lightblue'),
    )

    gat_id = models.CharField(max_length=16, primary_key=True, unique=True)
    gat_name = models.CharField(max_length=20, unique=True)
    gat_lat = models.FloatField()
    gat_lon = models.FloatField()
    gat_color = models.CharField(max_length=5, choices=colors, default='Black')

Моя проблема в том, что когда я хочу получить данные модели в моем views.py, потому что я делаю следующее:

gateways = Gateway.objects.all()
gateways = loads(serializers.serialize('json', gateways))

И это возвращает color id и я предпочитаю название цвета. Читая некоторые сообщения, я понимаю, что должен использовать .choices, но не уверен, где. Не могли бы вы мне помочь?

Большое спасибо

1 Ответ

0 голосов
/ 08 мая 2020

Посмотрите на здесь
и измените

gat_color = models.CharField(max_length=5, choices=colors, default='Black')

на

gat_color = models.CharField(max_length=2, choices=colors, default='0')

OR

Вы можете использовать IntegerField

class Gateway(models.Model):
    colors = [
        (0,'Black'), (1,'White'), (2,'Blue'), (3,'Red'),
        (4,'Green'), (5,'Brown'), (6,'Grey'), (7,'Pink'),
        (8,'Purple'), (9,'Orange'), (10,'Yellow'),(11,'Darkolive'),
        (12,'Lightpink'),(13,'Lightblue'),
    ]

    gat_id = models.CharField(max_length=16, primary_key=True, unique=True)
    gat_name = models.CharField(max_length=20, unique=True)
    gat_lat = models.FloatField()
    gat_lon = models.FloatField()
    gat_color = models.IntegerField(choices=colors, default=0)

Для отображения значения используйте:

gateway = Gateway.objects.all()[0]
gateway.get_gat_color_display()
>>> return 'Black'
...