Присоединяйтесь к несвязанным моделям и удаляйте дубликаты из набора запросов. - PullRequest
0 голосов
/ 26 декабря 2018

Мне действительно нужна помощь здесь.У меня есть две таблицы ниже.Как вы можете видеть, они полностью независимы (нет связи между ними). ​​

класс Люди (models.Model):

first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=35) 
phone_number = models.CharField(null=True, blank=True, max_length=15)
created = models.DateTimeField(auto_now=False, auto_now_add=True)

класс Blacklist (models.Model):

first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=35) 
phone_number = models.CharField(blank=True, max_length=15)

Как мне выполнить следующие действия: * У меня есть список телефонных номеров из таблицы «Черный список».

  1. Я хочу иметь возможность проверить, номер телефона(s) поле из таблицы «People» идентично любому «phone_number» в «Blacklist».

  2. Если оно идентично, УДАЛИТЕ дубликат «phone_number» из таблицы «People».Я провел несколько дней и не нашел правильного способа сделать это.

Я использую базу данных PostgreSQL.

Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 26 декабря 2018

Вам не нужна модель черного списка, вы можете просто добавить черный список в качестве логического поля в модель People, который по умолчанию будет иметь значение false

class People(models.Model):

    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=35) 
    phone_number = models.CharField(null=True, blank=True, max_length=15)
    created = models.DateTimeField(auto_now=False, auto_now_add=True)
    is_blacklisted = models.BooleanField(default = False)

Если у вас есть объект People, вы можете простопроверьте, занесен ли он в черный список с оператором if

if mypeople.is_blacklisted:
    mypeople.delete()

Вы также можете получить людей, которые занесены в черный список с фильтром

blacklisted_people = People.objects.filter(is_blacklisted = True)
non_blacklisted_people = People.objects.filter(is_blacklisted = False)
...