2016-11-01 1 views
1

У меня есть простой класс, основанный на представлении, который расширяет общий UpdateView от Django (1.10). В GET представление представляет собой предварительно заполненную форму из связанной модели. На POST представление обновляет запись db, а затем перенаправляет пользователя на страницу списка, которая показывает все записи базы данных в таблице. Я использую свойство success_url для выполнения перенаправления.Обновление рабочей страницы

Однако, когда отображается перенаправление и отображается страница списка, изменения, внесенные мной во время обновления, не отражаются. Когда я смотрю в базе данных, изменения там.

Перенаправление должно быть вытаскиванием из предыдущего кеша или что-то в этом роде, но как я могу предотвратить это? Я использую Django 1.10; Ubuntu OS; Chrome Browser; поставляемый 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 
     ] 
+0

Здесь нет кеша. Пожалуйста, покажите код для просмотра списка. –

+0

Обновлено. Я думаю, это может быть, потому что я храню данные в свойстве класса ListView и не обновляюсь/обновляюсь. В шаблоне HTML я обращаюсь к свойствам с помощью views.data. Я делаю это вместо переопределения метода get_context_data. Возможно, я должен просто принять этот подход, но пытался что-то другое. – blosche

ответ

0

Проблема в вашем ListView. Вы не должны выполнять операции с данными на уровне класса, так как они будут выполняться только один раз во время импорта.

Обычно, если вам нужно делать вычисления, вы сделали бы это в методе, например get_context_data. Но я не понимаю, почему вам нужно это понимание всего списка; ваш запрос объектов BrandAmbassador будет отправлен в шаблон уже по представлению, поэтому, если вам нужно, вы можете позвонить as_list на них там, когда вы выполните итерацию.

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

Yea ... Я как-то понял, что после того, как я разместил вопрос ... ala мой ответ. Большое спасибо за вашу помощь. – blosche

Смежные вопросы