[英]Django database caching
我有一個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
屬性最終將為空。)
此查詢未緩存。 get()調用永遠不會。 另一方面,(有時)在第一次評估后緩存QuerySet。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.