2017-01-16 4 views
0

Идея довольно проста, мне нужно запросить несколько моделей в моей функции. Чтобы сохранить его в моем шаблоне, я решил абстрагировать новую модель, которая будет содержать мои данные. Я создаю модель через лямбда.как запросить вложенные foreignKey

Вот эти модели.

class Contact(models.Model): 
    created_date = models.DateTimeField(auto_now_add=True) 
    updated_date = models.DateTimeField(auto_now=True) 
    lastname = models.CharField(max_length=50, null=True, blank=True) 
    firstname = models.CharField(max_length=50, null=True, blank=True) 
    email = models.EmailField(null=True, blank=True) 

class CRecord(models.Model): 
    created_date = models.DateTimeField(auto_now_add=True) 
    updated_date = models.DateTimeField(auto_now=True) 
    place = models.ForeignKey(Place, related_name="record") 
    contact = models.ForeignKey(Contact, blank=True, null=True, related_name="records") 

class Place(models.Model): 
    created_date = models.DateTimeField(auto_now_add=True) 
    updated_date = models.DateTimeField(auto_now=True) 
    deleted_date = models.DateTimeField(blank=True, null=True) 
    name = models.CharField(max_length=100, db_index=True) 
    lat = models.FloatField(db_index=True) 
    lon = models.FloatField(db_index=True) 

Вот моя лямбда, чтобы создать свой новый объект:

tr_contact = lambda x: dict(first_name=x.firstname, 
          last_name=x.lastname, 
          owned_place=?) 

В основном те, которые я хочу получить за owned_place есть место, содержащееся в CRecord. Часть, с которой я борюсь, состоит в том, что для каждого контакта есть несколько записей, и в каждой записи есть несколько мест. поле own_place должно быть равно каждому месту, содержащемуся в каждой записи.

Я попробовал несколько и даже задавались вопросом, если на самом деле это возможно в одном запросе ..

+0

Что вы пытаетесь сделать? Вы создаете новый объект или фильтруете некоторые объекты? Какой тип объекта вы пытаетесь создать/фильтровать? Ваш вопрос не совсем ясно об этих деталях. – AKS

+0

Я пытаюсь фильтровать. Часть, где я говорю о создании, строго касается шаблона, и вы правы, на самом деле это не совсем понятно. Я пытаюсь фильтровать. Я отфильтровал все контакты и хочу получить все места в каждой записи (может быть несколько записей для одного контакта) – bottus

+0

Пожалуйста, включите соответствующий код (просмотр или любую функцию), где вы пытаетесь сделать эту фильтрацию. – AKS

ответ

1

Jus't не ... то, что вы делаете здесь, в основном, воссоздавая values или (values_list) ,

Разница здесь в том, что ваш подход решение всего поиска запроса, который является более дорогостоящим, чем это должно быть, так как использовать выше ...

my_records_queryset.values('firstname', 'lastname', 'place') 

или вы можете посмотреть в Django Rest Framework and serializers что может дать вам больше контроля над тем, какие значения вы вернетесь для своих реляционных полей.

Смежные вопросы