来自给定对象实例的Django查询

时间:2016-01-11 12:52:38

标签: python django-queryset

我想知道我是否可以根据给定的对象实例进行查询。 例如:

class Author(models.Model):
    name = models.CharField(max_length=50)
    email = models.EmailField()

author1 = Author()
author1.name = 'Guy'
author1.email = 'guy@gmail.com'
# Imagine that author AAA with 1q2w2e@gmail.com already exist

author2 = Author.objects.get(author1)  # Does it work?

author2 = Author.objects.get(name=author1.name,   # I know this one works
                             email=author1.email) # but if I have 30 fields, 
                                                  # it doesn't seen a nice option

有没有办法根据author2实例获取author1

我用谷歌搜索,我找不到任何东西。 Documentation对我来说并没有任何启示。干杯!

2 个答案:

答案 0 :(得分:0)

是的确定。只需输入:

author2 = Author.objects.get(pk=author1.id)

如果你想要拥有author1对象的副本,你可以这样做:

author2 = Author.objects.get(pk=author1.id)
author2.pk = None
author2.save()

这将基于你author1

创建一个新的作者对象

答案 1 :(得分:0)

你可以这样做:

Author.objects.get(pk=author1.pk)

假设您要使用相同的主键查找作者。它只是回归自己。使用实例查询外键字段只是查询主键,因此上述内容大致相当于外键情况。

编辑:

如果你真的想根据每个字段名称进行查询(我不能想到一个用例),你可以使用Meta API

Author.objects.get(
    **{field.name: getattr(author1, field.name) 
       for field in author1._meta.get_fields(include_parents=False)}
)