gpt4 book ai didi

python - Django 数据库缓存

转载 作者:太空宇宙 更新时间:2023-11-04 06:31:07 27 4
gpt4 key购买 nike

我有一个 Django 表单,它使用整数字段通过主键查找模型对象。该表单有一个 save() 方法,该方法使用整数字段引用的模型对象。模型管理器的 get() 方法被调用两次,一次在 clean 方法中,一次在 save() 方法中:

class MyForm(forms.Form):
id_a = fields.IntegerField()

def clean_id_a(user_id):
id_a = self.cleaned_data['id_a']
try:
# here is the first call to get
MyModel.objects.get(id=id_a)
except User.DoesNotExist:
raise ValidationError('Object does not exist')

def save(self):
id_a = self.cleaned_data['id_a']
# here is the second call to get
my_model_object = MyModel.objects.get(id=id_a)

# do other stuff

我不确定这是两次还是一次访问数据库,所以我在 clean 方法中返回了对象本身,这样我就可以避免第二次 get() 调用。调用 get() 会访问数据库两次吗?还是对象缓存在线程中?

class MyForm(forms.Form):
id_a = fields.IntegerField()

def clean_id_a(user_id):
id_a = self.cleaned_data['id_a']
try:
# here is my workaround
return MyModel.objects.get(id=id_a)
except User.DoesNotExist:
raise ValidationError('Object does not exist')

def save(self):
# looking up the cleaned value returns the model object
my_model_object = self.cleaned_data['id_a']

# do other stuff

最佳答案

不,该值不会被缓存。你的第二个例子是正确的方法。

(第一个片段实际上包含一个错误,因为 clean 方法没有返回任何内容,所以 id_a 属性最终会为空。)

关于python - Django 数据库缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2651193/

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