如何过滤尚未保存在数据库中的Django模型?

时间:2018-08-13 00:49:50

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

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

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)

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

2 个答案:

答案 0 :(得分:0)

您可以遍历动物列表并对它们进行任何处理。

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

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

答案 1 :(得分:0)

您可以执行以下操作。请使用.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()]