django или категоризировать по некоторому полю - PullRequest
0 голосов
/ 27 мая 2020
class Example(models.Model):
    types = models.CharField(choices=Choice('A', 'B', 'C',  max_length=4)

и я хочу получить такой результат

{ 
    'A' : [ExampleObject(1), ExampleObject(3), ExampleObject(4)],
    'B' : [ExampleObject(2), ExampleObject(6)],
    'C' : [ExampleObject(5), ExampleObject(7), ExampleObject(8)]
}

Существуют ли какие-нибудь изящные функции orm без использования слишком большого количества функций?

1 Ответ

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

Один из способов - определить ваш выбор типа как ForeignKey. Тип - это зарезервированное слово python. Я не уверен, что понимаю ваши модели, но я предполагаю, что у вас есть оба класса Model и ModelObject (вас немного тошнит при использовании Model, потому что django использует models.Model). Я бы посоветовал:

class Category(models.Model):
    category_letter = models.CharField(max_length=1)


class Example(models.Model):
     category = models.ForeignKey(Category)    
     instance_info = [whatever info]

answer = {}
for category in Category.objects.all():
    answer[category.category_letter] = category.example_set.values_list('instance_info', flat=True)

ответ должен быть тем, что вы хотите. "example_set" - это ярлык, который Django делает для каждой модели. В Django, как и в Python, в именах классов используются заглавные буквы, в именах экземпляров - строчные буквы.

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