Как объединить записи двух моделей с разным набором полей? - Python
Формулировка задачи:
Здравствуйте!
Столкнулся с такой проблемой. У меня есть три таблицы: в одной находятся электронные адреса, в другой имя пользователя — эти две таблицы я объединяю в модели
В третьей таблице хранятся электронные адреса и имена пользователей, которые заказчик сам добавляет через форму.
Задача - объединить данные всех таблиц так, чтобы электронный адрес каждой записи был уникальным в этой выборке.
Пытался использовать itertools.chain.from_iterable, но он годится только для одного списка объектов. Делал так
Работает, но так уникальными являются электронные адреса в каждой выборке из таблиц по отдельности.
Такая организация не моя заслуга, делали до меня. Добавлять данные в первые 2 таблицы нельзя, т.к. это реальные пользователи, а в третьей таблицы только имена и почты тех, кому заказчик желает отправить рассылку дополнительно.
Заранее спасибо, если чего-то не хватает - дополню
Листинг программы
- class Customer(models.Model):
- user = models.ForeignKey(User, unique=True, verbose_name=u'пользователь')#, blank=True, null=True)
Листинг программы
- Customers = list(chain(Customer.objects.all(), SMail.objects.distinct()))
Решение задачи: «Как объединить записи двух моделей с разным набором полей?»
textual
Листинг программы
- # список словарей.
- emails1 = Customer.objects.all().distinct('user__email').values('user__email', 'user__username)
- # список емайлов
- ex_email = [row['user__email'] for row in emails1]
- # список словарей.
- emails2 = SMail.objects.filter(~Q(email__in=ex_email)).distinct('email').values('email', 'user')
- Customers = emails1.update(emails2)
- print Customers
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д