2017-05-03 4 views
1

Ich bekomme erhalten ungültiges ungültiges Literal für int() mit Basis 10: '1,303' und es zeigt den blasen Code bei Fehler. Die alten Daten funktionieren gut, es ist nur für neue Sachen, die ich der Datenbank hinzufüge. Irgendwelche Ideen?ungültiges Literal für int() mit Basis 10: '1,303'

def get(self, request, *args, **kwargs): 
    cart = self.get_object() 
    item_id = request.GET.get("item") 
    delete_item = request.GET.get("delete", False) 
    flash_message = "" 
    item_added = False 
    if item_id: 
        item_instance = get_object_or_404(Variation, id=item_id) ... 
     qty = request.GET.get("qty", 1) 
     try: 
      if int(qty) < 1: 
       delete_item = True 
     except: 
      raise Http404 
+0

Wird das Komma hier als Dezimalzeichen verwendet? Was erwarten Sie bei Dezimalstellen? – Sayse

+0

Related: [Wie verwende ich Python, um eine Zeichenfolge in eine Zahl zu konvertieren, wenn es Kommas als Tausendertrennzeichen enthält?] (Http://stackoverflow.com/q/1779288/1324033), aber verwenden Sie Django-Formulare. – Sayse

Antwort

0

diesem Grund sollten Sie django Formen anstelle von Daten ziehen direkt aus request.GET oder request.POST verwenden sollten. Django-Formulare bieten Ihnen eine Datenvalidierung, mit der Sie solche Dinge vermeiden können. Das Problem ist das Extra "," in Ihrem angenommenen Int.

int('1,303') 

Wird der obige Fehler auftreten. Das Folgende wird nicht:

int('1,303'.replace(',','')) 

So ist das offensichtliche Heilmittel dann, Ihren Int durch solch einen Filter zu übergeben.

item_instance = get_object_or_404(Variation, id=int(item_id.replace(',','')) 
+0

In europäischen Ländern wird '' '' anstelle von '.' als Dezimalpunkt verwendet, so dass dies möglicherweise nicht zum selben Ergebnis führt – Sayse

+1

guter Punkt @saysse umso mehr Grund, Django-Formulare zu verwenden – e4c5

Verwandte Themen