Seite 1 von 1

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

Verfasst: Mittwoch 6. Oktober 2010, 15:45
von delle
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

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

Verfasst: Mittwoch 6. Oktober 2010, 16:27
von apollo13
Ehrlich gesagt hab ich keine Lust solch einen Code zu lesen, pack ihn bitte in Python-Code tags, damit der leserlich wird…

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

Verfasst: Donnerstag 7. Oktober 2010, 07:23
von jens
@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...

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

Verfasst: Donnerstag 7. Oktober 2010, 08:02
von delle
Hallo Jens,

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

r/Delle

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

Verfasst: Donnerstag 7. Oktober 2010, 08:49
von jens
http://docs.djangoproject.com/en/dev/ -> Forms -> The basics -> Overview -> Using a form in a view

:lol:

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

Verfasst: Donnerstag 7. Oktober 2010, 10:05
von delle
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))

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

Verfasst: Donnerstag 7. Oktober 2010, 10:37
von jens
Das macht so auch noch keinen Sinn ;)

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

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

Verfasst: Donnerstag 7. Oktober 2010, 13:36
von delle
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))


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

Verfasst: Donnerstag 7. Oktober 2010, 13:46
von jens
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 ;)

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

Verfasst: Donnerstag 7. Oktober 2010, 14:43
von delle
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

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

Verfasst: Donnerstag 7. Oktober 2010, 21:00
von delle
Hallo Jens,
gib mir nochmal einen tip zu den locals()

r/Delle

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

Verfasst: Freitag 8. Oktober 2010, 14:37
von jens
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 ;)