2016-11-01 1 views
1

J'ai une vue basée sur la classe simple qui étend le UpdateView générique de Django (1.10). Sur le GET, la vue présente un formulaire pré-rempli à partir du modèle lié. Sur le POST, la vue met à jour l'enregistrement db et redirige l'utilisateur vers la page de liste qui affiche tous les enregistrements de base de données dans une table. J'utilise la propriété success_url pour effectuer la redirection. Toutefois, lorsque la redirection se termine et que la page de liste est affichée, les modifications que j'ai apportées lors de la mise à jour ne sont pas reflétées. Quand je regarde dans la base de données, les changements sont là.Forcer la mise à jour de la page

La redirection doit provenir d'un cache précédent ou de quelque chose, mais comment puis-je empêcher cela? J'utilise Django 1.10; Ubuntu OS; Navigateur Chrome serveur Web wsgi dev django fourni.

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

Il n'y a pas de cache ici. Veuillez montrer le code pour votre vue de liste. –

+0

Mis à jour. Je pense que c'est possible parce que je stocke les données dans une propriété de la classe ListView et qu'elle n'est pas actualisée/mise à jour. Dans le modèle HTML, j'accède aux propriétés en utilisant views.data. Je fais cela au lieu de surcharger la méthode get_context_data. Peut-être que je devrais juste prendre cette approche, mais essayait quelque chose de différent. – blosche

Répondre

0

Le problème est dans votre ListView. Vous ne devez pas effectuer d'opérations sur les données au niveau de la classe, car elles ne seront effectuées qu'une seule fois lors de l'importation.

Habituellement, si vous avez besoin de faire des calculs, vous le feriez dans une méthode, par exemple get_context_data. Mais je ne vois pas pourquoi vous devez faire cette compréhension de liste du tout; Votre sous-ensemble d'objets BrandAmbassador sera déjà envoyé au modèle par la vue, donc si vous en avez besoin, vous pouvez appeler le as_list là-dessus lorsque vous parcourez.

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

Oui ... j'ai un peu pensé après avoir posté la question ... ala ma réponse. Merci beaucoup pour votre aide. – blosche