Прошу помочь найти решение, каким образом можно включать/выключать нужные поля в Admin в зависимости от выбранного значения. Вот есть модель
class Page(models.Model):
pass
class ContentBlock(models.Model):
TYPE_BLOCK_CHOICE = (
('txt', u'Текст'),
('img', u'Изображение'),
)
itemPage = models.ForeignKey(Page, editable=False, blank=True, null=True)
choice = models.CharField(max_length=50, choices=TYPE_BLOCK_CHOICE, blank=True, null=True)
text = models.TextField(blank=True, null=True,)
image = models.ImageField(upload_to='content', blank=True, null=True,)
Если ContentBlock выводить отдельно, посредством ModelAdmin, то это решается через функции add_view (при создании записи) и change_view (при редактировании).
class ContentBlockAdmin(admin.ModelAdmin):
def add_view(self, *args, **kwargs):
self.fields = ('choice',)
return super(ContentBlockAdmin, self).add_view(*args, **kwargs)
def change_view(self, request, object_id, form_url='', extra_context=None):
if object_id:
choice = ContentBlock.objects.get(id=object_id).choice
if choice == 'txt':
self.fields = ('text',)
elif choice == 'img':
self.fields = ('image',)
return super(ContentBlockAdmin, self).change_view(request, object_id, form_url, extra_context)
admin.site.register(ContentBlock, ContentBlockAdmin)
А как то же самое сделать для вложенного блока, через InlineModelAdmin?
class ContentBlockInline(admin.StackedInline):
model = ContentBlock
class PageAdmin(admin.ModelAdmin):
inlines = [
ContentBlockInline,
]
admin.site.register(Page, PageAdmin)
Спасибо за помощь.
Updated 30 May 2015, 16:34 by avalp.