Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按自然键过滤?_Python_Django_Model_Natural Key - Fatal编程技术网

Python 按自然键过滤?

Python 按自然键过滤?,python,django,model,natural-key,Python,Django,Model,Natural Key,我没有所需对象的ID,因为它们是由bulk\u create创建的:bulk\u create不返回具有ID的对象,因此我需要通过它们的自然键获取它们 是否可以通过自然键过滤来获取对象?我在文件里什么也没找到 我们已经可以做到: id_list = [10,3,5,34] MyModel.objects.filter(id__in=id_list) 我想用自然钥匙做同样的事情: NK_list = [('bob','carpenter'),('jack','driver'),('Leslie'

我没有所需对象的ID,因为它们是由
bulk\u create
创建的:
bulk\u create
不返回具有ID的对象,因此我需要通过它们的自然键获取它们

是否可以通过自然键过滤来获取对象?我在文件里什么也没找到

我们已经可以做到:

id_list = [10,3,5,34]
MyModel.objects.filter(id__in=id_list)
我想用自然钥匙做同样的事情:

NK_list = [('bob','carpenter'),('jack','driver'),('Leslie','carpenter')]
chosen_persons = Person.objects.filter(natural_key__in=NK_list)
我的模型如下所示:

class PersonManager(models.Manager):
    def get_by_natural_key(self, name, job):
        return self.get(name=name, job=job)

class Person(Models.model):
    name = models.CharField(max_length=200)  
    job = models.CharField( max_length=200)  

    objects = PersonManager() 


    class Meta:
        unique_together = [['name', 'job']]

    def natural_key(self):
        return (self.name, self.job)
你可以这样做:

NK_list = [('bob','carpenter'),('jack','driver'),('Leslie','carpenter')]
query = Q()
for name, job in NK_list:
    query |= Q(name=name, job=job)

chosen_persons = Person.objects.filter(query)