我想知道我是否可以根据给定的对象实例进行查询。 例如:
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对我来说并没有任何启示。干杯!
答案 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)}
)