[英]Django: Changing a field type in a model form and then applying it to the model class
我有一堂课Book
:
from django.db import models
from users.models import User
class Book(models.Model):
title = models.CharField(max_length=150)
authors = models.ManyToManyField("Author")
链接到Author类:
class Author(models.Model):
name = models.CharField(max_length=150)
birthday = models.DateField()
我有一个Book类的表单,叫做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"]
我想用足够简单的BookForm创建Books,但是我希望用户能够输入文本(用逗号分隔),而不是像默认情况下那样从列表中挑选作者(因为它是ManyToManyField)。每个作者姓名的字符串。 我的视图设置如下:
def create_book(request):
if request.user is None:
return redirect("/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))
但这是行不通的。 我收到错误'BookForm' object has no attribute 'authors'
。 我不确定这里是否有根本性的问题或语法是否合理,但是有人可以帮忙吗? 我对Python和Django都是全新的:[
谢谢!
要停止django自动创建<select>
表单条目,请从字段列表中删除'authors'
:
class BookForm(forms.ModelForm):
authors = CharField()
class Meta:
model = Book
fields = ["title"]
Django用自动创建的条目覆盖了您创建的authors条目。
至于第二个错误,从绑定的表单中获取数据的正确方法不是通过form.authors
,而是通过form.cleaned_data['authors']
。
PS您从此开始:
if request.user is None:
return redirect("/users/login/")
为此,您应该使用login_required
装饰器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.