Я новичок с Джанго, поэтому я прошу прощения за это (возможно) немой вопрос:AttributeError «юникода» объект не имеет атрибута «Numero»
Я пытаюсь сделать форму на основе содержания модель с именем Linea
, которая, в зависимости от ввода, перенаправляет пользователя на вид с именем lineas_detalles
. Если вход не является частью модели Linea
, форма не должна ничего делать.
я могу отлично загрузить страницу, где форма, но когда я ввожу что-то и я представляю, я получаю ошибку:
AttributeError at /lineas/
'unicode' object has no attribute 'numero'
Содержание, которое предназначено для перехода в форму является числом.
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', {})
[...]
отслеживающий Marcks происхождение проблемы в этой строке файла views.py
: linea_numero = str(linea.numero)
Update 1
После коррекции Jaime Sanz Исправлена ошибка AttributeError. Теперь код выглядеть следующим образом:
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)
[...]
Остальное такое же, как и раньше. Во всяком случае, теперь я получаю эту другую ошибку:
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>)/$']
с отслеживающими маркировками на ТИС линии в views.py:
return redirect('lineas_detalles', linea_numero=linea_numero)
Я учусь программировать сам, извините, если эти вопросы слишком основные ,
Update 2
Я сделал некоторые изменения, так что теперь у меня нет каких-либо ошибок:
urls.py
url(r'^lineas/(?P<linea_numero>\d+)/$', views.lineas_detalles, name='lineas_detalles'),
просмотров .py
def lineas_detalles(request, linea_numero):
return render(request, 'bustopapp/lineas_detalles.html', {})
Но теперь я понимаю, что независимо от того, какое число я набираю в форме, вид Lineas
отправляет мне сообщение Lineas_detalles
. Первоначально мое намерение состояло в том, чтобы показать ошибку, когда что-то, чего нет в базе данных, вводится в форму.
ошибка уже говорит для себя, 'linea' является объектом unicode (просто рассматривайте его как строку), unicode-объект не имеет атрибута' numero', о чем еще вам не ясно? –