我有一个Django窗体,它使用整数字段通过主键查找模型对象。该表格有一个save()
方法,该方法使用由整型字段引用的模型对象。该模型的经理的get()
方法被调用了两次,一次是在清洁的方法,一次在save()
方法:Django数据库缓存
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
我不知道这是否访问数据库两次或一次,所以我返回的对象本身干净的方法,以便我可以避免第二个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
在这种情况下,是我避免了第二个电话的方式好如何做到这一点?或者是否有规范的Django方法来执行此操作? – hekevintran 2010-04-16 07:12:07
带查询集所有不可调用字段值都被缓存,而可调用字段值不是 – satoru 2010-04-16 07:23:44
@ Satoru.Logic什么是可调用字段值?你怎么称呼一个价值? – hekevintran 2010-04-16 07:49:24