1
votes

TypeError Exception: l'argument doit être entier ou float sur un argument de vue à l'intérieur d'un modèle

J'essaye de vérifier s'il y a des produits sur la productList, mais ceci apparaît:

Valeur d'exception: l'argument doit être entier ou float - sur cette ligne {% for p in productList%} dans home. html

Si vous avez besoin d'informations supplémentaires, faites-le moi savoir.

Merci d'avance pour votre aide!


views.py

{% load static %}
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Logo</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="{% static 'main/css/main.css' %}"/>
</head>
<body>
<div id="mainWrapper">
  <header> 
    <div id="logo"> <!-- <img src="logoImage.png" alt="Logo"> --> 
      LogoName </div>
    <div id="headerLinks">
      <a href="#" title="Login/Register">Login/Registo</a>
      <a href="#" title="Cart">Carrinho de Compras</a></div>
  </header>
  <nav> <a href="1/">1</a> <a href="2/">2</a> <a href="3/">3</a><a href="4/">4</a> <a href="5/">5</a> <a href="6/">6</a> <a href="7/">7</a></nav>
  <section id="offer">
    <h2>Something</h2>
    <p>Something Something</p>
  </section>
<div id="content">
    <section class="sidebar"> 
      <input type="text"  id="search" value="search">
      <div id="menubar">
        <nav class="menu">
          <h2> 1 </h2>
          <hr>
          <ul>
            <li><a href="#" title="Link">Link 1</a></li>
            <li><a href="#" title="Link">Link 2</a></li>
            <li><a href="#" title="Link">Link 3</a></li>
            <li class="notimp"><a href="#"  title="Link">Link 4</a></li>
          </ul>
        </nav>
        <nav class="menu">
          <h2> 2 </h2>
          <hr>
          <ul>
            <li><a href="#" title="Link">Link 1</a></li>
            <li><a href="#" title="Link">Link 2</a></li>
            <li><a href="#" title="Link">Link 3</a></li>
            <li class="notimp"><a href="#" title="Link">Link 4</a></li>
          </ul>
        </nav>
      </div>
    </section>
    <section class="mainContent">
      {% for p in productList %}

      {% endfor %}
    </section>
  </div>
  <footer> 
    <div>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam varius sem neque. Integer ornare.</p>
    </div>
    <div>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam varius sem neque. Integer ornare.</p>
    </div>
    <div class="footerlinks">
      <p><a href="#" title="Link">Link 1 </a></p>
      <p><a href="#" title="Link">Link 2</a></p>
      <p><a href="#" title="Link">Link 3</a></p>
    </div>
  </footer>
</div>
</body>
</html>

models.py

from django.db import models

class Product(models.Model):
    name = models.CharField(max_length = 200)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    description = models.TextField()
    def __str__(self):
        return self.name

home.html

from django.shortcuts import render
from .models import Product

def home(request):
    context = {'productList': Product.objects.all() }
    return render(request, 'main/home.html', context)

Modifier: Journal des erreurs

http://dpaste.com/1HW39KS


3 commentaires

pouvez-vous publier un journal des erreurs complet


À partir du journal des erreurs, l'erreur est déclenchée par cette ligne dans le modèle, mais en la traçant à travers, Product.objects.all () provoque une erreur sqlite3 lors de l'appel de create_decimal. Je soupçonne que vos données ont un mauvais prix. Peut-être nul? Commencez avec un nouveau fichier de base de données propre ou essayez d'autoriser null sur le prix.


Merci beaucoup @MarkBailey! L'un des prix avait une virgule.


3 Réponses :


1
votes

essayez ceci

{% with i=forloop.counter %}
       {{i|add:"-1"}}
{% endwith %}

référez-vous ceci

j'espère que cela vous aidera


1 commentaires

J'ai essayé de suivre votre suggestion, mais l'erreur est toujours sur la ligne de condition if. Merci pour votre réponse!



1
votes

Votre balise set définit la valeur comme une chaîne . donc i est maintenant une chaîne, c'est pourquoi vous ne pouvez pas utiliser la balise divisibleby .

{% if productList %}
    {% for p in productList %}
       {% with i=forloop.counter % }
           {% if i|add:"-1"|divisibleby:4 %}
               {# do whatever here #}
           {% endif %}
           {{ p.price }}
           {{ p.name }}
       {% endwith %}
{% endif %}


7 commentaires

Merci pour votre réponse, mais l'erreur est toujours sur la ligne de condition if.


essayez {% if i | add: "- 1" | divisibleby: 4%}


J'ai déjà essayé de le faire. Je ne pense pas que le problème se trouve dans cette ligne, car si je supprime la condition if, la même erreur est présentée sur la boucle for.


si vous pouvez ajouter le reste du modèle, ce sera utile .. il y a une fonction / balise dans laquelle vous envoyez une chaîne au lieu d'un int de float


J'ai ajouté le modèle à l'article maintenant


Certaines références à i ne fonctionneront pas car elles ne se trouvent pas dans la balise with . Vous devez inclure tous les {% if i ... sous le même bloc avec .


Mais ce n'est pas le problème, j'ai supprimé les lignes à l'intérieur de la boucle for et le problème est toujours là. La liste est le problème



1
votes

Merci pour toutes vos réponses et suggestions! @MarkBailey a souligné que l'erreur était due à une erreur de remplissage de la base de données et que c'était le cas. J'avais une virgule au lieu d'un point décimal dans l'un des champs de prix.


0 commentaires