Django数据库自学习

Django数据库自学习,django,django-models,django-forms,django-views,Django,Django Models,Django Forms,Django Views,我有一个依赖于其他型号的系统,但我想让它更开放一些,因为我的用户有时需要更多 目前,为了论证起见,我在作者模型中有两位作者 john, james 当用户添加一本书,而作者不可用时,如何在表单中添加其他字段,如果选中该字段,则会生成一个额外字段,用户可以在该字段中输入作者的姓名,表单处理方式是在提交时添加并选择新作者 型号.PY class Author(models.Model): name = models.CharField(max_length=30) class Autho

我有一个依赖于其他型号的系统,但我想让它更开放一些,因为我的用户有时需要更多

目前,为了论证起见,我在
作者
模型中有
两位作者

john, james
当用户添加一本书,而
作者
不可用时,如何在表单中添加
其他
字段,如果选中该字段,则会生成一个额外字段,用户可以在该字段中输入
作者的姓名
,表单处理方式是在提交时添加并选择新作者

型号.PY

class Author(models.Model):
    name = models.CharField(max_length=30)
class AuthorForm(ModelForm):
    class Meta:
        model = Author
def new(request, template_name='authors/new.html'):

if request.method == 'POST':
    form = AuthorForm(request.POST, request.FILES)
    if form.is_valid():
        newform = form.save(commit=False)
        newform.user = request.user
        newform.save()

        return HttpResponseRedirect('/')

else:
    form = AuthorForm()

context = { 'form':form, }

return render_to_response(template_name, context,
    context_instance=RequestContext(request))
FORMS.PY

class Author(models.Model):
    name = models.CharField(max_length=30)
class AuthorForm(ModelForm):
    class Meta:
        model = Author
def new(request, template_name='authors/new.html'):

if request.method == 'POST':
    form = AuthorForm(request.POST, request.FILES)
    if form.is_valid():
        newform = form.save(commit=False)
        newform.user = request.user
        newform.save()

        return HttpResponseRedirect('/')

else:
    form = AuthorForm()

context = { 'form':form, }

return render_to_response(template_name, context,
    context_instance=RequestContext(request))
视图.PY

class Author(models.Model):
    name = models.CharField(max_length=30)
class AuthorForm(ModelForm):
    class Meta:
        model = Author
def new(request, template_name='authors/new.html'):

if request.method == 'POST':
    form = AuthorForm(request.POST, request.FILES)
    if form.is_valid():
        newform = form.save(commit=False)
        newform.user = request.user
        newform.save()

        return HttpResponseRedirect('/')

else:
    form = AuthorForm()

context = { 'form':form, }

return render_to_response(template_name, context,
    context_instance=RequestContext(request))

假设您的图书模型是:

class Book(models.Model):
    author = models.ForeignKey(Author)
    #etc.
试着这样做:

class BookForm(ModelForm):
    other = forms.CharField(max_length=200, required=False)

    def clean(self, *args, **kwargs):
        other = self.cleaned_data.get('other')
        author = self.cleaned_data.get('author')
        if author is None or author == '': 
            self.cleaned_data['author'] = Author(name=other).save()

        return self.cleaned_data

    class Meta:
        model = Book
如果作者是一个多领域的人:

类图书格式(模型格式): 其他=forms.CharField(最大长度=200,必需=False)


假设您的图书模型是:

class Book(models.Model):
    author = models.ForeignKey(Author)
    #etc.
试着这样做:

class BookForm(ModelForm):
    other = forms.CharField(max_length=200, required=False)

    def clean(self, *args, **kwargs):
        other = self.cleaned_data.get('other')
        author = self.cleaned_data.get('author')
        if author is None or author == '': 
            self.cleaned_data['author'] = Author(name=other).save()

        return self.cleaned_data

    class Meta:
        model = Book
如果作者是一个多领域的人:

类图书格式(模型格式): 其他=forms.CharField(最大长度=200,必需=False)