ich mit django neu bin, so dass ich entschuldige mich für diese (wahrscheinlich) dumme Frage:Attribute ‚Unicode‘ Objekt hat kein Attribut ‚numero‘
I basierend auf dem Inhalt eines ein Formular machen bin versucht, Modell mit dem Namen Linea
, das den Benutzer abhängig von der Eingabe in eine Ansicht mit dem Namen lineas_detalles
umleitet. Wenn die Eingabe kein Teil des Modells Linea
ist, soll das Formular nichts tun.
ich die Seite perfekt laden kann, wo die Form ist, aber wenn ich etwas eingeben und Ich lege ich den Fehler:
AttributeError at /lineas/
'unicode' object has no attribute 'numero'
Der Inhalt, der in der Form gehen soll, ist eine Zahl.
lineas.html
{% load staticfiles %}
[...]
{% block content %}
<h1>Escoja una línea</h1>
<form method="POST" class="post-form">{% csrf_token %}
{{ form.as_p }}
<button type="submit">Actualizar</button>
</form>
{% endblock %}
forms.py
from django import forms
from .models import Linea
class LineaForm(forms.ModelForm):
class Meta:
model = Linea
fields = ('linea',)
models.py
from __future__ import unicode_literals
from django.db import models
class Linea(models.Model):
linea = models.CharField(max_length=2)
def __str__(self):
return self.linea
[...]
urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
[...]
url(r'^lineas/$', views.lineas, name='lineas'),
url(r'^lineas/(?P<linea_numero>)/$', views.lineas_detalles, name='lineas_detalles'),
]
views.py
from django.shortcuts import render, redirect
from .forms import LineaForm
def lineas(request):
if request.method == "POST":
form = LineaForm(request.POST)
if form.is_valid():
linea = form.cleaned_data['linea']
linea_numero = str(linea.numero)
return redirect('lineas_detalles', linea_numero=linea_numero)
else:
form = LineaForm()
return render(request, 'bustopapp/lineas.html', {'form': form})
def lineas_detalles(request):
return render(request, 'bustopapp/lineas_detalles.html', {})
[...]
Die Zurückverfolgungs Marcks den Ursprung des Problems in dieser Zeile der Datei views.py
: linea_numero = str(linea.numero)
-Update 1
Nach der Korrektur von Jaime Sanz ist der AttributeError korrigiert. Jetzt ist der Code sieht wie folgt aus:
forms.py
[...]
class LineaForm(forms.ModelForm):
class Meta:
model = Linea
fields = ('numero',)
models.py
[...]
class Linea(models.Model):
numero = models.CharField(max_length=2)
def __str__(self):
return self.numero
views.py
[...]
form = LineaForm(request.POST)
if form.is_valid():
linea = form.save(commit=False)
linea_numero = str(linea.numero)
return redirect('lineas_detalles', linea_numero=linea_numero)
[...]
Der Rest ist der gleiche wie zuvor. Wie auch immer, jetzt bekomme ich diese anderen Fehler:
NoReverseMatch at /lineas/
Reverse for 'lineas_detalles' with arguments '()' and keyword arguments '{'linea_numero': '3'}' not found. 1 pattern(s) tried: ['lineas/(?P<linea_numero>)/$']
Mit den Zurückverfolgungs bei tis Linie in views.py Kennzeichnung:
return redirect('lineas_detalles', linea_numero=linea_numero)
I Programmierung von mir lernen bin, tut mir leid, wenn diese Fragen sind zu einfach .
Update 2
ich einige Änderungen vorgenommen haben, ich so jetzt keine Fehler haben:
urls.py
url(r'^lineas/(?P<linea_numero>\d+)/$', views.lineas_detalles, name='lineas_detalles'),
Ansichten .py
Aber jetzt merke ich, dass unabhängig davon, welche Nummer ich in das Formular eintippe, die Lineas
Ansicht mich an die Lineas_detalles
Ansicht sendet. Ursprünglich wollte ich einen Fehler anzeigen, wenn etwas, das nicht in der Datenbank ist, in das Formular eingegeben wird.
Der Fehler bereits spricht für sich selbst ist 'linea' ein Unicode-Objekt (man bedenke es einfach als String), Unicode-Objekt hat kein Attribut' numero', worüber man sich sonst nicht im Klaren ist? –