2015-01-07 3 views
0

У меня две модели, и мне нужно выбрать поля обеих моделей в одном запросе.Выбор дочерних объектов с использованием внешнего ключа в запросе django

class Machines(model.Model): 
    name = models.CharField(max_length=100) 
    state = models.CharField(max_length=20) 
    type = models.CharField(max_length=20) 

class AssignedUsers(model.Model): 
    machine_id = models.ForeignKey(Machines, null=True) 
    user_email = models.CharField(max_length=100) 

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

q = Q() 
q = Q(name__icontains=searchword) | Q(user_email__icontains=searchword) 
filtered_list = result_set.filter(q) 
+0

Кажется, вы должны следовать в обратном ключ, определенный здесь: https://docs.djangoproject.com/en/dev/topics/db/queries/#following-relationships-backward, 'rs.assignedusers_set' – shevski

ответ

0

Примечание: distinct() метод. Machines может содержать более одного соответствия AssignedUsers, поэтому distinct() удалит дубликаты из запроса.

machines = Machines.objects \ 
        .distinct() \ 
        .filter(Q(name__icontains=searchword) | 
          Q(assignedusers__user_email__icontains=searchword)) 
Смежные вопросы