强制页面刷新
Force page refresh
我有一个简单的基于 class 的视图,它扩展了 Django (1.10) 的通用 UpdateView。在 GET 上,视图显示来自链接模型的预填充表单。在 POST 上,视图更新数据库记录,然后将用户重定向到显示 table 中所有数据库记录的列表页面。我正在使用 success_url 属性 进行重定向。
但是,当重定向完成并显示列表页面时,我在更新期间所做的更改并没有反映出来。当我查看数据库时,更改就在那里。
重定向必须从以前的缓存或其他东西中提取,但如何防止这种情况发生?我正在使用 Django 1.10; Ubuntu OS; Chrome 浏览器;提供 wsgi dev django 网络服务器。
class UpdateBrandAmbassador(UpdateView):
model = BrandAmbassador
form_class = BrandAmbassadorForm
template_name = 'core/base_form.html'
title = "Update Brand Ambassador"
success_url = "/brand_ambassadors"
class BrandAmbassadorList(TemplateView):
headers = [
("Name", 16),
("Address", 20),
("City, State", 10),
("Zip", 5),
("E-Mail", 15),
("Phone", 10),
]
data = [each.as_list() for each in BrandAmbassador.objects.all()]
template_name = 'core/list_objects.html'
title = "Brand Ambassador Master"
update_delete_url = "brand_ambassadors"
class BrandAmbassador(models.Model):
name_last = CharField(max_length=255)
name_first = CharField(max_length=255)
address_1 = CharField(max_length=255, null=True)
address_2 = CharField(max_length=255, null=True)
city = CharField(max_length=255, null=True)
state = CharField(max_length=255, null=True)
zip_code = CharField(max_length=255, null=True)
email = EmailField(null=True)
phone = CharField(max_length=255, null=True)
region = ForeignKey(Region, related_name="brand_ambassadors")
def __str__(self):
return " ".join([self.name_first, self.name_last])
def as_list(self):
return [
self.id,
", ".join([self.name_last, self.name_first]),
" ".join([self.address_1, self.address_2]),
", ".join([self.city, self.state]),
self.zip_code,
self.email,
self.phone
]
问题出在您的 ListView 中。您不得在 class 级别对数据执行操作,因为它们只会在导入时执行一次。
通常,如果您需要进行计算,您会在方法中进行计算,例如 get_context_data
。但是我根本不明白为什么你需要做那个列表理解;您的 BrandAmbassador 对象的查询集将被视图发送到模板,因此如果需要,您可以在迭代时在那里调用 as_list
。
{% for obj in object_list %}
{{ obj.as_list }}
{% endfor %}
我有一个简单的基于 class 的视图,它扩展了 Django (1.10) 的通用 UpdateView。在 GET 上,视图显示来自链接模型的预填充表单。在 POST 上,视图更新数据库记录,然后将用户重定向到显示 table 中所有数据库记录的列表页面。我正在使用 success_url 属性 进行重定向。
但是,当重定向完成并显示列表页面时,我在更新期间所做的更改并没有反映出来。当我查看数据库时,更改就在那里。
重定向必须从以前的缓存或其他东西中提取,但如何防止这种情况发生?我正在使用 Django 1.10; Ubuntu OS; Chrome 浏览器;提供 wsgi dev django 网络服务器。
class UpdateBrandAmbassador(UpdateView):
model = BrandAmbassador
form_class = BrandAmbassadorForm
template_name = 'core/base_form.html'
title = "Update Brand Ambassador"
success_url = "/brand_ambassadors"
class BrandAmbassadorList(TemplateView):
headers = [
("Name", 16),
("Address", 20),
("City, State", 10),
("Zip", 5),
("E-Mail", 15),
("Phone", 10),
]
data = [each.as_list() for each in BrandAmbassador.objects.all()]
template_name = 'core/list_objects.html'
title = "Brand Ambassador Master"
update_delete_url = "brand_ambassadors"
class BrandAmbassador(models.Model):
name_last = CharField(max_length=255)
name_first = CharField(max_length=255)
address_1 = CharField(max_length=255, null=True)
address_2 = CharField(max_length=255, null=True)
city = CharField(max_length=255, null=True)
state = CharField(max_length=255, null=True)
zip_code = CharField(max_length=255, null=True)
email = EmailField(null=True)
phone = CharField(max_length=255, null=True)
region = ForeignKey(Region, related_name="brand_ambassadors")
def __str__(self):
return " ".join([self.name_first, self.name_last])
def as_list(self):
return [
self.id,
", ".join([self.name_last, self.name_first]),
" ".join([self.address_1, self.address_2]),
", ".join([self.city, self.state]),
self.zip_code,
self.email,
self.phone
]
问题出在您的 ListView 中。您不得在 class 级别对数据执行操作,因为它们只会在导入时执行一次。
通常,如果您需要进行计算,您会在方法中进行计算,例如 get_context_data
。但是我根本不明白为什么你需要做那个列表理解;您的 BrandAmbassador 对象的查询集将被视图发送到模板,因此如果需要,您可以在迭代时在那里调用 as_list
。
{% for obj in object_list %}
{{ obj.as_list }}
{% endfor %}