因此,这是我的一个示例,该站点按部门排序将人员组织到部门中。与问题的概念相同,但模型不同。本示例使用多对多表。
class Department(models.Model): slug = models.SlugField( verbose_name = _(u'Slug'), help_text= _(u'Uri identifier for this department.'), max_length=255 ) name = models.CharField( verbose_name = _(u'Department Name'), help_text= _(u'The department's name.'), max_length = 255 ) description = models.TextField( verbose_name = _(u'Description'), help_text= _(u'Department's description') ) people = models.ManyToManyField( Person, through = 'DepartmentPeople', related_name = 'people', verbose_name = _(u'People'), help_text= _(u'People in this Department') ) order_by = models.IntegerField( verbose_name = _(u'Ordering Weight'), help_text= _(u'This item's weight within a list.'), max_length = 255 ) class meta: verbose_name = _(u"Department") verbose_name_plural = _(u"Departments") ordering = ['order_by',] def people_list(self): return [dp.person for dp in DepartmentPeople.objects.filter(department=self).order_by('order')] def __unipre__(self): return self.name
通过模型:
class DepartmentPeople(models.Model): person = models.ForeignKey( Person, verbose_name = _(u'Person'), help_text= _(u'Person is a member of this deparment.'), ) department = models.ForeignKey( Department, verbose_name = _(u'Department'), help_text= _(u'Pseron is a member of this department.'), )order = models.IntegerField( verbose_name = _(u'Order'), help_text= _(u'What order to display this person within the department.'), max_length = 255 ) class meta: verbose_name = _(u"Department Person") verbose_name_plural = _(u"Department People") ordering = ['order',] def __unipre__(self): return self.person.first_name + " " + self.person.last_name + " is a member of " + self.department.name + (" in position %d" % self.order)
和管理员:
征求意见:class DepartmentPeopleInline(admin.TabularInline): model = DepartmentPeople extra = 1class DepartmentAdmin(admin.ModelAdmin): inlines = (DepartmentPeopleInline,)admin.site.register(Person, PersonAdmin)admin.site.register(Department, DepartmentAdmin)
注意:以下是我的PersonAdmin,但在此示例中其不必要地复杂。你可以通过一个简单的
class PersonAdmin(admin.ModelAdmin) : pass
但是,这就是我在我的应用程序中使用的:
class PersonForm(forms.ModelForm): abstract = forms.CharField( widget=TinyMCE(attrs={'cols': 80, 'rows': 30}) ) class meta: model = Personclass PersonAdmin(reversion.VersionAdmin): form = PersonForm # The Form Fieldsets fieldsets = [ ( None, { 'fields' : [('first_name', 'last_name', 'post_nominal', ), 'slug', 'title', 'headshot', 'large_photo', ('email', 'phone', ), 'abstract'] }, ) ] # Prepopulated fields prepopulated_fields = {'slug': ('first_name', 'last_name', 'post_nominal', )} # Fields that are readonly #readonly_fields = ('slug', ) def formfield_for_dbfield(self, db_field, **kwargs): if db_field.name == 'headshot': request = kwargs.pop("request", None) kwargs['widget'] = AdminImageWidget return db_field.formfield(**kwargs) return super(PersonAdmin, self).formfield_for_dbfield(db_field, **kwargs)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)