Здравствуйте. Я хочу создать простую форму поиска, которая позволит получать данные из связанных моделей.
У меня есть 3 модели:
class Person(models.Model):
name = models.CharField()
surname = models.CharField()
class Phone(models.Model):
person = models.ForeignKey(Person,on_delete=models.CASCADE,related_name="phones")
phone = models.CharField(0
class Email(models.Model):
person = models.ForeignKey(Person,on_delete=models.CASCADE, related_name="emails")
email = models.EmailField()
на моем домашнем экране:
def home(request):
people = Person.objects.all()
query = request.GET.get("q")
if query:
people = Person.objects.filter(Q(name__icontains=query)|Q(surname__icontains=query)|
Q(emails__contains=query)|Q(phones__icontains=query))
//when I try emails_email__icontains=query I get error about no such fields
return render(request,'app/home.html',{'users': people})
И это прекрасно работает, но я бы тоже хотел поискать через электронную почту и телефоны (у человека может быть мало электронной почты и телефона).Если в моем запросе я использую другое ИЛИ (|), я получил ошибку, я не могу объединить 2 модели в одном запросе.Я также хочу попробовать с цепочкой:
people= above query
emails = Email.objects.filter(email__icontains=query)
context = chain(people,emails)
К сожалению, это решение тоже не работает.Как я могу решить это?
РЕДАКТИРОВАТЬ: ШАБЛОН
{% block content %}
{%for user in users %}
{{user.id }} {{user.name}} {{user.surname}}
{% for email in user.email_set.all %}
{{email}}
{% endfor %}
{% endfor %}