【问题标题】:How do I filter through Django models that are not yet saved in DB?如何过滤尚未保存在数据库中的 Django 模型?
【发布时间】:2019-01-19 16:36:58
【问题描述】:

这是我的模型类和一个函数。我只想将新动物添加到我的列表中。

class Animals(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.TextField(unique=True)
    class Meta:
        db_table = 'animals'


animals = []
for name in ['duck', 'cow', 'cat', 'dog']:
    if (THIS ALREADY EXISTS) animals.objects.filter(name=name): # This will throw an error, because its a list
        continue
   else:
        animal = Animals(name=name)
        animals.append(animal)

请记住,我还不想将这些模型保存到数据库中,但最好查询存储在内存中的模型列表,就好像它们都保存为数据库表一样。

【问题讨论】:

  • 模型用于将数据存储到数据库中,
  • 最终它们将被存储在数据库中,但我还想对它们做更多的事情。现在我应该循环遍历所有的动物吗?
  • 不幸的是我不明白你的逻辑。能说清楚吗?
  • 我想我在问什么是最有效的方法来确认动物名称尚未包含在我的列表中?
  • 我的理解是,如果数据库中没有,您需要将新动物添加到数据库中。对吧?

标签: sql django python-3.x django-models


【解决方案1】:

您可以遍历动物列表并对它们做任何事情。

但要注意所有未保存在数据库中的实例都没有 pk 属性

但你不能通过模型​​查询过滤它们

【讨论】:

    【解决方案2】:

    你可以做这样的事情。请使用 .exists()

    animals = ['dog', 'cat', 'dragon', 'bear']
    new_animals = []
    for animal in animals:
       if Animals.objects.filter(name=animal).exists():
          continue
       else:
          new_animal = Animal(name=animal)
          new_animals.append(new_animal)
    

    或简单地说:

    new_animals = [Animals(name=animal) for animal in animals if not Animals.objects.filter(name=animal).exists()]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 2016-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多