gpt4 book ai didi

python - 有没有办法检查是否已经获取了相关对象?

转载 作者:行者123 更新时间:2023-11-28 20:18:31 24 4
gpt4 key购买 nike

我希望能够使用 select_relatedprefetch_related 检查相关对象是否已被提取,以便我可以相应地序列化数据。这是一个例子:

class Address(models.Model):
street = models.CharField(max_length=100)
zip = models.CharField(max_length=10)

class Person(models.Model):
name = models.CharField(max_length=20)
address = models.ForeignKey(Address)

def serialize_address(address):
return {
"id": address.id,
"street": address.street,
"zip": address.zip
}

def serialize_person(person):
result = {
"id": person.id,
"name": person.name
}
if is_fetched(person.address):
result["address"] = serialize_address(person.address)
else:
result["address"] = None

######

person_a = Person.objects.select_related("address").get(id=1)
person_b = Person.objects.get(id=2)

serialize_person(person_a) #should be object with id, name and address
serialize_person(person_b) #should be object with only id and name

在这个例子中,函数 is_fetched 就是我要找的。我想确定这个人对象是否已经有一个解析地址,如果有,它也应该被序列化。但如果没有,则不应执行进一步的数据库查询。

那么有没有办法在 Django 中实现这一点?

最佳答案

Django 2.0 开始,您可以通过以下方式轻松检查所有获取的关系:

obj._state.fields_cache

ModelStateFieldsCacheDescriptor负责存储您的缓存关系。

>>> Person.objects.first()._state.fields_cache
{}
>>> Person.objects.select_related('address').first()._state.fields_cache
{'address': <Address: Your Address>}

关于python - 有没有办法检查是否已经获取了相关对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36402129/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com