Django ORM получить значение всех полей. (внешние ключи)
class MyUser(models.Model):
name = models.CharField(max_length=10)
class Foo(models.Model):
my_user = models.ForeignKey(MyUser,on_delete=models.CASCADE)
text = models.CharField(max_length=25)
Допустим, у нас есть две такие модели. Я хочу получить все поля с помощью ORM запроса из модели MyUser. Например, так:
{
"name":"example"
"Foo":{
"text":"example-text",
"text":"example_text2"
}
}
Как мне написать запрос для этого?
MyUser.objects.all() # But give it ALL FIELDS + RELEATED FIELDS
Я не думаю, что вы можете вернуть два ответа таким образом. Это должны быть два отдельных запроса. Попробуйте обратиться к Django: objects and model_set
Для этого не обязательно нужен специальный набор запросов или фильтр, но обратите внимание, что ваше отношение Many-to-One означает, что MyUser
может иметь много объектов Foo
:
my_user = MyUser.objects.get(...) # get the user by PK or some other means
# get all Foos related to my_user
my_user.foo_set.all()
# get the first Foo related to my user
my_user.foo_set.first()
# get the text from the first Foo
my_user.foo_set.first().text
# get the Foos which have text 'example-text'
my_user.foo_set.filter(text='example-text')
Вы можете получить доступ к некоторым из них и в шаблонах Django:
{{ my_user.foo_set.first.text }}
{% for foo in my_user.foo_set.all }}
{{ foo.text }}
{% endfor %}
Если вы хотите создать dict, то вы можете просто просмотреть обратный аксессор и добавить значения поля/ключа к вашему ключу ['Foo']
довольно легко.