Форум сайта python.su
Подскажите как отоброзить в древовидном виде поле django-mptt в list_editable админки.
models.py:
class ProductCategory(MPTTModel): name = models.CharField(_(u'Название'), max_length=255) slug = models.SlugField(u'Slug', max_length=255) parent = TreeForeignKey('self', null=True, blank=True, related_name='children', verbose_name=_(u'Родительская категория')) class MPTTMeta: order_insertion_by = ['name'] class Meta: db_table = 'product_category' verbose_name = _(u'Категория') verbose_name_plural = _(u'Категории') def __unicode__(self): return self.name class Product(models.Model): name = models.CharField(_(u'Название'), max_length=255) slug = AutoSlugField(populate_from='name', editable=True) category = models.ForeignKey(ProductCategory, related_name='category_products', verbose_name=_(u'Категория'), blank=True, null=True, default=None) created = models.DateTimeField(_(u'Создан'), auto_now_add=True, editable=False) description = models.TextField(_(u'Описание'), null=True, blank=True) def __unicode__(self): return self.name
class ProductForm(forms.ModelForm): category = TreeNodeChoiceField(label=_(u'Категория'), queryset=ProductCategory.objects.all())
class ProductAdmin(admin.ModelAdmin): prepopulated_fields = {'slug': ('name',)} list_display = [ 'name', 'description_html', 'category', 'status', 'created'] list_editable = ['category', 'status'] list_filter = ['status'] search_fields = ['name'] form = ProductForm def description_html(self, obj): return obj.description description_html.short_description = u'Описание' description_html.allow_tags = True
Отредактировано pyOut (Фев. 2, 2013 11:42:49)
Офлайн
В ProductAdmin добавить метод formfield_for_foreignkey:
class ProductAdmin(admin.ModelAdmin): prepopulated_fields = {'slug': ('name',)} list_display = [ 'name', 'description_html', 'category', 'status', 'created'] list_editable = ['category', 'status'] list_filter = ['status'] search_fields = ['name'] form = ProductForm def description_html(self, obj): return obj.description description_html.short_description = u'Описание' description_html.allow_tags = True def formfield_for_foreignkey(self, db_field, request, **kwargs): from mptt.models import MPTTModel, TreeForeignKey if issubclass(db_field.rel.to, MPTTModel) \ and not isinstance(db_field, TreeForeignKey) \ and not db_field.name in self.raw_id_fields: defaults = dict(form_class=TreeNodeChoiceField, queryset=db_field.rel.to.objects.all(), required=False) defaults.update(kwargs) kwargs = defaults return super(ProductAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
Отредактировано alafin (Фев. 4, 2013 16:28:33)
Офлайн