2016-05-09 14 views
-2

Ich habe ein Bearbeitungsformular erstellt, um den Namen einer Person zu bearbeiten. Basierend auf ähnliche Stackoverflow Antworten zu diesem Thema, das ich mein Modell und Ansicht geändert, aber auch nach den Änderungen der Folge Fehler weiterhin bestehen:AttributError-Objekt Person hat keine Attribut-ID

Attribute bei/persion/4/Editiertyp Objekt ‚Person‘ hat kein Attribut ‚id '

models.py:

class Person(models.Model): 
    person_text = models.CharField(max_length=200) 
    pub_date = models.DateTimeField(auto_now_add=True) 

urls.py

url(r'^(?P<pk>\d+)/edit/$', views.person_edit, name='person_edit'), 

views.py

def person_edit(request, pk): 
    obj = get_object_or_404(Person, pk=pk) 

    if request.method == "POST": 
     form = PersonForm(request.POST, instance=obj) 
     if form.is_valid(): 
      obj = form.save(commit=False) 
      obj.name = request.person_text 
      obj.save() 
      return redirect('/person/index.html',context) 
    else: 
     form = PersonForm(instance=obj) 
    return render(request, 'person/edit_person.html', {'form': form}) 

edit_person.html

{% block content %} 
<form action ="" method="post"> 
     {% csrf_token %} 
     {{ form.as_p }} 
     <button type="submit">Update</button> 
</form> 
{%endblock content %} 

aktualisieren die views.py zu Changed:

def person_edit(request, pk): 
    Person = get_object_or_404(Person, pk=pk) 

    if request.method == "POST": 
     form = PersonForm(request.POST, instance=Person) 
     if form.is_valid(): 
      Person = form.save(commit=False) 
      Person.name = request.POST['person_text'] 
      Person.save() 
      return redirect('/person/index.html',context) 
    else: 
     form = PersonForm(instance=Person) 
    return render(request, 'person/edit_person.html', {'form': form}) 
+0

Wie 'index.html' und' edit_person.html' aussehen? – DeepSpace

+0

@DeepSpace siehe aktualisierte Frage –

Antwort

0

In Ihrem else-Klausel, eine Klasse sind vorbei - Frage, aber ich nehme an, dass Ihr Code tatsächlich Person - anstelle einer Instanz hat. Sie sollten obj wie in der anderen Klausel übergeben.

(Das nächste Mal bitte Ihre eigentlichen Code veröffentlichen, und die voll Zurückverfolgungs.)

+0

oops. etwas Code gemischt. die Frage bearbeitet. Der Fehler ist jetzt: Typ Objekt 'Person' hat kein Attribut 'person_text' –

+0

Nein. Erstens haben Sie etwas völlig anderes als das, was ich vorgeschlagen habe, geändert, und zweitens kann diese Änderung nicht den von Ihnen angegebenen Fehler anzeigen ('request' ist keine Person) . Bitte zeigen Sie den ** tatsächlichen Code ** an. –

+0

Ich aktualisierte die Frage mit dem tatsächlichen Code + die Anpassungen, die Sie vorgeschlagen haben. Es funktioniert jetzt. –