invalid literal for int() with base 10: ''

Django, Flask, Bottle, WSGI, CGI…
Antworten
delle
User
Beiträge: 15
Registriert: Freitag 7. November 2008, 15:00

Hallo,

den Fehler invalid -> literal for int() with base 10: '' <- bekomme ein ModelChoiceField im request einen leeren String erzeugt.
Wenn ich in allen Feldern etwas auswähle funktioniert es.
Die Lösung kennt ihr, dass haben bestimmt schon einige Dödel gefragt ;O)

form:

Code: Alles auswählen

 amgroup = Group.objects.get(name='Accountmanager')
    am = forms.ModelChoiceField(required=False, queryset=amgroup.user_set.all(), empty_label='---')
    cmgroup = Group.objects.get(name='Carriermanager')
    ll = forms.ModelChoiceField(required=False, queryset=cmgroup.user_set.all(), empty_label='---')
    csgroup = Group.objects.get(name='Consultant')
    tpc = forms.ModelChoiceField(required=False, queryset=csgroup.user_set.all(), empty_label='---')
    vigroup = Group.objects.get(name='Vertriebsinnendienst')
    vid = forms.ModelChoiceField(required=False, queryset=vigroup.user_set.all(), empty_label='---')
view:

Code: Alles auswählen

@staff_member_required
def gates_liste_mobile(request):
    """
    Anzeigen der Gates liste auf einen Mobile Geraete
    """
    auth_ok=1
    form = GateForm()
    if request.POST:
        # gates query erstellen
        alle_gates = Gate.objects.filter(( Q(tpc=request.POST['tpc']) | Q(vid=request.POST['vid']) | Q(am=request.POST['am'])),
                                     ( Q(erledigt=request.POST['erledigt']))
                                     )


    else:
        alle_gates = Gate.objects.all()


    return render_to_response('gates/gateslistemobile.html', locals(), context_instance=RequestContext(request))
model:

Code: Alles auswählen

   am =  models.ForeignKey(User, related_name='AM', blank=True , null=True)
    vid =  models.ForeignKey(User, related_name='VID', blank=True, null=True)
    ll =  models.ForeignKey(User, related_name='LL', blank=True, null=True)
    tpc =  models.ForeignKey(User, related_name='TPC', blank=True, null=True)
r/Delle
Zuletzt geändert von delle am Mittwoch 6. Oktober 2010, 19:26, insgesamt 1-mal geändert.
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Ehrlich gesagt hab ich keine Lust solch einen Code zu lesen, pack ihn bitte in Python-Code tags, damit der leserlich wird…
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

@delle: Du nutzt doch eine Form. Warum greifst du dann direkt auf die POST Daten zu? Schau mal in die django doku, wie man das typischerweise macht!
invalid -> literal for int() with base 10: ''
Das heißt es soll irgendwo eine Zahl gemacht werden, mit einem String der keine Zahl beinhaltet. bsp: int("foo")

Du musst wohl deinen Queryset filter anders aufbauen...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
delle
User
Beiträge: 15
Registriert: Freitag 7. November 2008, 15:00

Hallo Jens,

ich bin schon auf dem Weg zur Doku, aber kannst du mich noch etwas weiter schubsen.

r/Delle
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

http://docs.djangoproject.com/en/dev/ -> Forms -> The basics -> Overview -> Using a form in a view

:lol:

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
delle
User
Beiträge: 15
Registriert: Freitag 7. November 2008, 15:00

Top, der Fehler ist weg. Nur bekomme ich noch kein DB Abfrage.
Ich suche. Falls es jemanden auffällt, ein Hinweis wäre nicht schlecht.

r/Detlef

Code: Alles auswählen

@staff_member_required
def gates_liste_mobile(request):
    """
    Anzeigen der Gates liste auf einen Mobile Geraete
    """
    auth_ok=1
    form = GateForm()
    if request.POST:
        if form.is_valid():
            tpc = form.cleaned_data['tpc']
            vid = form.cleaned_data['vid']
            am = form.cleaned_data['am']
            erledigt = form.cleaned_data['erledigt']

            # gates query erstellen
            alle_gates = Gate.objects.filter(( Q(tpc=tpc) | Q(vid=vid) | Q(am=am)),
                                             ( Q(erledigt=erledigt))
                                            )


    else:
        alle_gates = Gate.objects.all()


    return render_to_response('gates/gateslistemobile.html', locals(), context_instance=RequestContext(request))
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Das macht so auch noch keinen Sinn ;)

Schau dir nochmal das Django beispiel an, insbesondere wie und wo die Form instanziert wird ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
delle
User
Beiträge: 15
Registriert: Freitag 7. November 2008, 15:00

Hallo, ist doch top, wenn man sich mal reflektieren kann.
Jetzt funzt es.

Danke !
Delle

Code: Alles auswählen

@staff_member_required
def gates_liste_mobile(request):
    """
    Anzeigen der Gates liste auf einen Mobile Geraete
    """
    auth_ok=1
    if request.POST:
        form = FilterForm(request.POST)
        if form.is_valid():
            tpc = form.cleaned_data['tpc']
            vid = form.cleaned_data['vid']
            am = form.cleaned_data['am']
            erledigt = form.cleaned_data['erledigt']

            # gates query erstellen
            alle_gates = Gate.objects.filter(( Q(tpc=tpc) | Q(vid=vid) | Q(am=am)),
                                             ( Q(erledigt=erledigt))
                                            )
        else:
            raise FormError

    else:
        form = FilterForm()
        alle_gates = Gate.objects.all()


    return render_to_response('gates/gateslistemobile.html', locals(), context_instance=RequestContext(request))

Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Das raise FormError ist aber nur zum Test, oder? Normalerweise bekommt der User die Form mit Fehlermeldungen zurück, wenn was falsch ist. Also den else-Zweig einfach löschen.

locals() zu nehmen erspart zwar tipperei, ist IMHO aber schlechter Stil ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
delle
User
Beiträge: 15
Registriert: Freitag 7. November 2008, 15:00

Hallo,

ja nur zum testen. Darin hing ich einige Zeit. Da ich einfach 4 Choice-Felder aus einer Modelform nehmen wollte, die viel mehr Felder enthält, so das ich Pflichtfelder nicht bedient hatte. Ich habe dann eine Form nur für die 4 Choice Felder gebaut, da ich nicht die Felder excluden konnte, da ich sich an anderer Stelle natürlich brauchte.

r/Delle
delle
User
Beiträge: 15
Registriert: Freitag 7. November 2008, 15:00

Hallo Jens,
gib mir nochmal einen tip zu den locals()

r/Delle
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mach mal über return render_to_response() ein print locals(), dann wirst du sehen das da ein normales dict raus kommt. Also lieber das dict (der context) selbst zusammen bauen. Ansonsten übergibt man dem template Objekt die da eigentlich nicht benötigt werden ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten