簡體   English   中英

Django數據庫緩存

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM