извлекать или возвращать только экземпляр модели внешнего ключа или однозначного поля из набора запросов в django - PullRequest
1 голос
/ 14 сентября 2011

Кто-нибудь знает, возможно ли извлечь из экземпляра набора в Django только экземпляры модели внешнего ключа или одно к одному полю?связаны с полем OneToOne следующим образом:

class Post(models.Model):
    ...


class MagicalPost(models.Model):
    post = models.OneToOneField('Post')
    pony = models.TextField(max_length=100, help_text='This is where the MAGIC happens!')

Я хотел бы выполнить запрос для всех магических сообщений, но я хочу только получать объекты сообщений.Прямо сейчас я перебираю набор запросов для извлечения сообщений:

magical_posts = MagicalPost.objects.all()
posts = []

for magical_post in magical_posts:
    posts.append(magical_post.post)

return posts

Далее по тексту сообщения обрабатываются функциями, которые работают с общими объектами Post, поэтому я не хочу иметь дело сэкстраполяция magical_post.post, и при этом я не нуждаюсь в магических атрибутах.

Это не "чувствует" правильно.Я думаю, что мог бы быть лучший способ извлечь внешние ключи, так что, если кто-то знает лучший / более чистый способ сделать это, я весь слух;в противном случае я просто буду держать это так, потому что.,,Что ж .,,это работает!

Спасибо.

1 Ответ

1 голос
/ 14 сентября 2011

Например, вы можете легко использовать select_related.Это будет только один запрос БД.

magical_posts = MagicalPost.objects.select_related()
# same code

Или используйте 2 запроса, например:

posts_ids = MagicalPost.objects.values_list('post', flat=True)
posts = Post.objects.filter(id__in=posts_ids)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...