У меня в основном есть эта модель:
class MyModel(models.Model):
uid = models.CharField()
m2m = models.ManyToManyField(AnotherModel)
class AnotherModel(models.Model):
name = models.CharField()
lang = models.CharField()
, и я хотел бы получить список таких диктовок (конечно, возможно, с фильтрацией, но это прекрасно работает):
[{
'uid': uid,
'm2m': [m2m.name, m2m.name, ...]
}]
Если я делаю:
MyModel.objects.select_related('m2m').filter().values('uid', 'm2m__name')
Я получаю следующее:
[{
'uid': name_1,
'm2m__name': m2m_1.name
},{
'uid': name_1,
'm2m__name': m2m_2.name
}]
, где у меня две проблемы :
- Iполучить отдельный элемент списка за каждый м2м!Я хотел бы только один на UID, с именами m2m в списке
- Я получаю "m2m__name", где я хотел бы только "name" или, возможно, "m2m"
(если яне задавайте явно m2m__name
и используйте только m2m
Я не получаю Unicode , но идентификатор)
Есть ли способ решить эти проблемы прямо в набор запросов без прохожденияцикл питона?Какой самый эффективный способ?
РЕДАКТИРОВАТЬ
... возможно, с использованием .raw () или .extra (), и некоторый самодельный SQL может хотя бы решить вопрос2.?