【问题标题】:Join unrelated models and delete duplicate from the queryset加入不相关的模型并从查询集中删除重复项
【发布时间】:2019-05-24 23:19:42
【问题描述】:

我真的需要帮助。我有下面的两个表。如您所见,它们是完全独立的(两者之间没有关系)。

类人(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)

类黑名单(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. 我希望能够检查“人”表中的“电话号码”字段是否与“黑名单”中的任何“电话号码”相同。

  2. 如果相同,则从“人员”表中删除重复的“电话号码”。 折腾了几天,也没找到正确的方法。

我正在使用 PostgreSQL 数据库。

任何帮助将不胜感激。

【问题讨论】:

    标签: django postgresql django-queryset django-orm django-database


    【解决方案1】:

    您不需要 Blacklist 模型,您可以简单地将 blacklisted 作为布尔字段添加到 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)
    

    【讨论】:

    • 我更新了我的答案,如果它被列入黑名单,你可以在对象上调用 delete() 并且它将被删除
    • 现在说得通了。谢谢@AmineMessaoudi
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 2019-03-19
    • 1970-01-01
    • 2020-02-18
    • 2013-03-03
    • 2014-07-03
    • 1970-01-01
    相关资源
    最近更新 更多