使用ManyToMany的Django表单使用TextInput而不是MultiSelect

时间:2014-07-26 20:24:40

标签: python django python-2.7 django-forms

使用以下我可以获得一个多选区域,但我想要的是让用户能够使用<input type="text">为作者姓名添加作者,并为标题下拉。它的编写方式我们必须知道所有可能的书籍作者都不合理。理想情况下会有+所以有人可以将多位作者添加到同一本书中。

我使用的是基于表单的视图,您可以在撰写此问题时查看代码here

from django.db import models
from django import forms

TITLE_CHOICES = (('MR', 'Mr.'),('MRS', 'Mrs.'),('MS', 'Ms.'))


class Author(models.Model):
    name = models.CharField(max_length=80)
    title = models.CharField(max_length=3, choices=TITLE_CHOICES)

    def __unicode__(self):
        return self.name


class Book(models.Model):
    name = models.CharField(max_length=200)
    authors = models.ManyToManyField(Author)

    def __unicode__(self):
        return self.name


class AuthorForm(forms.ModelForm):
    class Meta:
        model = Author
        fields = '__all__'

        widgets = {
            'name': forms.TextInput(attrs={'cols': 80, 'rows': 20}),
            'title': forms.TextInput(attrs={'cols': 80, 'rows': 20})
        }


class BookForm(forms.ModelForm):
    class Meta:
        model = Book
        fields = '__all__'

    def save(self, request, commit=True):
        super(BookForm, self).save(request)
        pass

html可能是这样的(具有不同的name属性)

<input type="text" name="booktitle">
<div>
  <select><option>Mr</option><option>Mrs</option></select>
  <input type="text" name="authorName">
  <button name="clickOneToAddAnotherAuthor">
</div>
<div>
  <select><option>Mr</option><option>Mrs</option></select>
  <input type="text" name="authorName">
  <button name="clickOneToAddAnotherAuthor">
</div>

1 个答案:

答案 0 :(得分:1)

您可以使用ChoiceField

class AuthorForm(forms.ModelForm):
    title = forms.ChoiceField()
    class Meta:
        model = Author
        fields = '__all__'

        widgets = {
            'name': forms.TextInput(attrs={'cols': 80, 'rows': 20}),
            'title': forms.Select(attrs={'cols': 80, 'rows': 20})
        }