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'] довольно легко.

Вернуться на верх