Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 8, 2011 15:24:22

Valerikk
От:
Зарегистрирован: 2009-04-07
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Inlines в админке

Здравствуйте.
Помогите, плиз, разобраться.
Есть 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 не пойму.



Офлайн

#2 Сен. 8, 2011 15:52:30

Valerikk
От:
Зарегистрирован: 2009-04-07
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Inlines в админке

Нашлось решение
В 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)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version