<p>我已经用有意义的模型构建了一个完整的工作示例。它工作得很好。我在Python3.4.x和Django1.8.4上测试过。
首先,我运行管理面板并为Thema模型中的每个选项创建记录</p>
<p>模型.py</p>
<pre><code>from django.db import models
class Author(models.Model):
fname = models.CharField(max_length=50)
lname = models.CharField(max_length=80)
def __str__(self):
return "{0} {1}".format(self.fname, self.lname)
class Thema(models.Model):
THEME_CHOICES = (
('tech', 'Technical'),
('novel', 'Novel'),
('physco', 'Phsycological'),
)
name = models.CharField(max_length=20,choices=THEME_CHOICES, unique=True)
def __str__(self):
return self.name
class Book(models.Model):
name = models.CharField(max_length=50)
author = models.ForeignKey(Author)
themes = models.ManyToManyField(Thema)
def __str__(self):
return "{0} by {1}".format(self.name,self.author)
</code></pre>
<p>表单.py</p>
<pre><code>from django import forms
from .models import *
class BookForm(forms.ModelForm):
themes = forms.ModelMultipleChoiceField(queryset=Thema.objects, widget=forms.CheckboxSelectMultiple(), required=False)
</code></pre>
<p>管理.py</p>
<pre><code>from django.contrib import admin
from .models import *
from .forms import *
@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
pass
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
form = BookForm
@admin.register(Thema)
class ThemaAdmin(admin.ModelAdmin):
pass
</code></pre>