使用Django为ManyToManyField定义订单

使用Django为ManyToManyField定义订单,第1张

使用Django为ManyToManyField定义订单

因此,这是我的一个示例,该站点按部门排序将人员组织到部门中。与问题的概念相同,但模型不同。本示例使用多对多表。

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)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5666941.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存