Найти - Пользователи
Полная версия: Inlines в админке
Начало » Django » Inlines в админке
1
Valerikk
Здравствуйте.
Помогите, плиз, разобраться.
Есть 2 модели:

описание свойств меню
class menu_objects(models.Model):
title = models.CharField(u"Имя меню", max_length=50)
menu_type = models.PositiveSmallIntegerField(u"Тип меню", choices=MENU_TYPE, default=SECONDARY)
block = models.PositiveSmallIntegerField(u"Колонка", choices=BLOCKS, default=LEFT_BAR)
template = models.CharField(u"Шаблон", max_length=30, default="sec_menu.html")
published = models.BooleanField(u"Опубликовать", default=True)
и собственно пункты меню:
class menu(MPTTModel):
title = models.CharField(u"Заголовок", max_length=50)
parent = models.ForeignKey('self', blank=True, null=True, verbose_name="Родитель", related_name='child')
menu_content = models.PositiveSmallIntegerField(u"Тип материала", choices=MENU_CONTENT, default=2)
category = models.ForeignKey("Category", verbose_name=u"Категории", blank=True, null=True)
page = models.ForeignKey(FlatPage, verbose_name=u"Страницы", blank=True, null=True)
published = models.BooleanField(u"Опубликовать", default=True)
position = models.IntegerField(u"Позиция в списке", default=0)
menu_object = models.ForeignKey("menu_objects", verbose_name=u"Меню", related_name="menu_obj")
Связаны Один-ко-многим.

Admin.py:

class Menu_objectsInlines(admin.TabularInline):

model = menu
extra = 0

def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "parent":
kwargs["queryset"] = menu.objects.filter(menu_object__id=1)
return super(Menu_objectsInlines, self).formfield_for_foreignkey(db_field, request, **kwargs)

class menu_objectsAdmin(admin.ModelAdmin):
list_display = ('title', 'menu_type', 'block', 'published')
inlines = [Menu_objectsInlines]
admin.site.register(menu_objects, menu_objectsAdmin)
Никак не пойму, как мне в инлайне сделать так, чтобы в поле parent были только записи текущего menu_objects.
Строка
kwargs["queryset"] = menu.objects.filter(menu_object__id=1)
, где я жестко указываю id menu_objects, отрабатывает. Но как подставлять туда нужный id не пойму.
Valerikk
Нашлось решение
В admin.py

В admin.py:

class Menu_objectsInlines(admin.TabularInline):
model = menu
extra = 0

class menu_objectsAdmin(admin.ModelAdmin):
list_display = ('title', 'menu_type', 'block', 'published')
inlines = [Menu_objectsInlines]

def change_view(self, request, object_id, extra_context=None):
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'parent':
kwargs['queryset'] = menu.objects.filter(menu_object__id=object_id)
return super(Menu_objectsInlines, self).formfield_for_foreignkey(db_field, request, **kwargs)

Menu_objectsInlines.formfield_for_foreignkey = formfield_for_foreignkey

self.inline_instances = [Menu_objectsInlines(self.model, self.admin_site)]

return super(menu_objectsAdmin, self).change_view(request, object_id,
extra_context=extra_context)


admin.site.register(menu_objects, menu_objectsAdmin)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB