2009-03-19 7 views
2

Je crée un modelForm avec instance au modèle existant (Book). Je ne suis pas en mesure de mettre à jour l'enregistrement de livres. L'ajout d'un nouvel enregistrement est correct mais lorsque je tente de mettre à jour, il semble être incapable de trouver l'éditeur (qui est une clé étrangère). L'erreur est "Aucun éditeur ne correspond à la requête donnée".Enregistrer modelForm pour mettre à jour l'enregistrement existant

models.py

Editeur de classe (models.Model):

name = models.CharField(max_length=30) 

address = models.CharField(max_length=50) 

city = models.CharField(max_length=60) 

state_province = models.CharField(max_length=30) 

country = models.CharField(max_length=50) 

website = models.URLField() 

def __unicode__(self): 
    return self.name 

class Meta: 

    ordering = ["name"] 

classe Auteur (models.Model):

first_name = models.CharField(max_length=30) 

last_name = models.CharField(max_length=40) 

email = models.EmailField(blank=True, verbose_name='e-mail') 

objects = models.Manager() 

sel_objects=AuthorManager() 

def __unicode__(self): 

return self.first_name+' '+ self.last_name 

livre de classe (models.Model):

title = models.CharField(max_length=100) 

authors = models.ManyToManyField(Author) 

publisher = models.ForeignKey(Publisher) 

publication_date = models.DateField(blank=True, null=True) 

num_pages = models.IntegerField(blank=True, null=True) 

classe BookForm (ModelFo rm):

class Meta: 

    model = Book 

views.py

def authorcontactupd (demande, id):

if request.method == 'POST': 

    a=Author.objects.get(pk=int(id)) 

    form = AuthorForm(request.POST, instance=a) 

    if form.is_valid(): 

     form.save() 

     return HttpResponseRedirect('/contact/created') 

else: 

    a=Author.objects.get(pk=int(id)) 

    form = AuthorForm(instance=a) 

return render_to_response('author_form.html', {'form': form}) 

erreur msg

Page non trouvée (404) Demande Méthode: POST URL de demande: http://127.0.0.1:8000/books/bookupd/

Non Publisher correspond à la requête donnée.

Vous voyez cette erreur car vous avez DEBUG = True dans votre fichier de paramètres Django. Changez cela en False, et Django affichera une page standard 404.

urls.py

de django.conf.urls.defaults import *

de direct_to_template importation django.views.generic.simple

de mysite10.books.views about_pages à l'importation, books_by_publisher, authorcontact, bookcontact, booklisting, authorcontactupd

d'importation django.views.generic list_detail

de mysite10.books.models Editeur d'importation, livre

par admin import django.contrib

admin.autodiscover()

get_books def():

return Book.objects.all() 

publisher_info = {

'queryset': Publisher.objects.all(), 

'template_name':'books/publisher_publisher_list_page.html', 

'template_object_name': 'publisher', 

'extra_context': {'book_list': Book.objects.all}, 

}

book_info = {

'queryset': Book.objects.order_by('-publication_date'), 

'template_name':'books/publisher_publisher_list_page.html', 

'template_object_name': 'book', 

'extra_context': {'publisher_list': Publisher.objects.all}, 

}

oreilly_books = {

'queryset': Book.objects.filter(publisher__name="O'Reilly"), 

'template_name':'books/publisher_publisher_list_page.html', 

'template_object_name': 'book', 

'extra_context': {'publisher_list': Publisher.objects.all}, 

}

urlpatterns = patterns ('',

(r'^admin/(.*)', admin.site.root), 

(r'^polls/', include('mysite10.polls.urls')), 

(r'^search-form/$', 'mysite10.views.search_form'), 

(r'^search/$', 'mysite10.views.search'), 

(r'^contact/$', 'mysite10.contact.views.contact'), 

(r'^contact/thanks2/(\d+)$', 'mysite10.contact.views.thanks2'), 

(r'^contact/thanks/$', 'mysite10.contact.views.thanks'), 

(r'^publishers/$', list_detail.object_list, publisher_info), 

(r'^books/$', list_detail.object_list, book_info), 

(r'^books/oreilly/$', list_detail.object_list, oreilly_books), 

(r'^books/(\w+)/$', books_by_publisher), 

(r'^author/$', authorcontact), 

(r'^authorupd/(\d+)/$', authorcontactupd), 

(r'^contact/created/$', 'mysite10.books.views.created'), 

(r'^bookform/$', bookcontact), 

(r'^contact/bookscreated/$', 'mysite10.books.views.books_created'), 

(r'^booklist/$', 'mysite10.books.views.booklisting'), 

(r'^books/bookupd/(\d+)$', 'mysite10.books.views.book_upd'), 

)

------------- ------------------------------------

Je l'ai enfin eu travailler avec les codes ci-dessous. Erreur dans urls.py à cause d'une barre oblique manquante avant $. modifiée à (r '^ livres/bookupd/(\ d +)/$'

views.py

def book_upd (demande, id):

if request.method == 'POST': 

    a=Book.objects.get(pk=int(id)) 

    form = BookForm(request.POST, instance=a) 

    if form.is_valid(): 

     form.save() 

     return HttpResponseRedirect('/contact/bookscreated') 
else: 

    a=Book.objects.get(pk=int(id)) 

    form = BookForm(instance=a) 

return render_to_response('book_form.html', {'form': form}) 

urls.py

(r '^ livres/bookupd/(\ d +)/$', 'monsite10.books.views.book_upd'),

+0

urls.py ajouté, je pourrais mettre à jour le modèle Author avec la même logique mais ce modèle est plutôt simple sans clés étrangères. Le modèle Book a à la fois des clés étrangères et plusieurs à plusieurs – mcwong

+0

full urls.py inclus – mcwong

+0

problème est il n'y a pas traceback. J'ai copié et collé le texte intégral msg dans la section #error msg. – mcwong

Répondre

0

Il y a quelques informations manquantes comme ce que vous avez dans votre urls.py. Pouvez-vous le poster? Avez-vous vérifié dans la base de données à l'enregistrement n'a pas été mis à jour? (L'erreur peut être le résultat du traitement de la redirection)


Votre modification ne suffit pas: - avez-vous vérifié la databse pour voir si le dossier est mis à jour? - Veuillez coller l'urls.py entière comme par exemple il est intéressant de voir ce que/contact/créé est mappé au cas où il a réussi, ou si vous avez des méthodes publisher.get() dedans

En outre le retraçage peut également fournir beaucoup d'informations utiles quant à la source du problème.


Avez-vous vérifié si l'objet est mis à jour dans la base de données même si vous obtenez l'erreur?

Pouvez-vous essayer de supprimer la section "oreilly_books" (ou au moins la partie queryset) et essayer de faire la même chose sans elle?

+0

urls.py a ajouté – mcwong

+0

avez-vous vérifié si l'objet est mis à jour dans la base de données même si vous obtenez le Erreur? – nivhab

Questions connexes