J'ai une classe Book
:Django: Modification d'un type de champ sous forme de modèle, puis l'appliquer à la classe modèle
from django.db import models
from users.models import User
class Book(models.Model):
title = models.CharField(max_length=150)
authors = models.ManyToManyField("Author")
qui relie à la classe Auteur:
class Author(models.Model):
name = models.CharField(max_length=150)
birthday = models.DateField()
Et je ont une forme pour la classe du livre appelé BookForm
from django import forms
from django.forms import CharField
from books.models import Book
class BookForm(forms.ModelForm):
authors = CharField()
class Meta:
model = Book
fields = ["title","authors"]
Je veux créer des livres avec le BookF orm qui est assez simple, mais au lieu de choisir les auteurs d'une liste comme cela arriverait avec la valeur par défaut (puisque c'est un ManyToManyField), je veux que l'utilisateur puisse entrer du texte, une chaîne séparée par des virgules du nom de chaque auteur. Ma vue est configurée comme suit:
def create_book(request):
if request.user is None:
return redirect("https://stackoverflow.com/users/login/")
if request.method == "POST":
form = BookForm(request.POST)
if form.is_valid():
nbook = form.save(commit=False)
authorlist = form.authors.split(",")
nbook.owner = request.user
nbook.save()
for auth in authorlist:
nbook.authors.create(name=auth)
return redirect("/books/")
else:
form = BookForm()
return render_to_response("books/create.html", {
"form": form,
}, context_instance=RequestContext(request))
Mais cela ne fonctionne pas. J'obtiens l'erreur 'BookForm' object has no attribute 'authors'
. Je ne suis pas sûr s'il y a un problème fondamental ici ou si c'est juste la syntaxe, mais quelqu'un peut-il donner un coup de main? Je suis complètement nouveau à la fois Python et Django: [
Merci!
Merci beaucoup pour votre aide. En ce qui concerne la connexion, je n'utilise pas la fonctionnalité django auth/login officielle selon les directives [déraisonnables] de mon affectation. – Joseph
Ah. Sois un bon sport et écris tes propres décorateurs. Je suis sûr que vous obtiendrez de meilleures notes pour "expérimenter avec le paradigme de programmation méta". –