强制页面刷新

时间:2016-11-01 22:30:32

标签: django caching django-class-based-views

我有一个简单的基于类的视图,它扩展了Django的(1.10)通用UpdateView。在GET上,视图显示了链接模型的预填充形式。在POST上,视图更新db记录,然后将用户重定向到显示表中所有数据库记录的列表页面。我正在使用success_url属性来执行重定向。

但是,当重定向完成并显示列表页面时,我不会反映更新期间所做的更改。当我查看数据库时,会有更改。

重定向必须从先前的缓存中拉出来,但我该如何防止这种情况发生?我正在使用Django 1.10; Ubuntu OS; Chrome浏览器;提供wsgi dev django webserver。

 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
        ]

1 个答案:

答案 0 :(得分:0)

问题出在ListView中。您不能对类级别的数据执行操作,因为它们只会在导入时执行一次。

通常,如果您需要进行计算,您可以在方法中执行此操作,例如get_context_data。但是,我不明白为什么你需要完成这个列表理解;您的BrandAmbassador对象的查询集将被视图发送到模板,因此如果您需要,可以在迭代时在其上调用as_list

{% for obj in object_list %}
    {{ obj.as_list }}
{% endfor %}