0

У меня есть меню ресторана с 2 моделями. A Product модель и модель MenuSelection. Продукт может принадлежать многим меню. MenuSelection добавляется к Product в качестве встроенного отношения.Итерации через трясогузки Фрагменты Inline Объекты

Задача, которую я испытываю, заключается в перечислении объектов меню в ModelAdminlist_display. Нужно ли мне создавать отношения ForeignKey или создавать @property, которые повторяются через объекты Inline? Я определенно ударил по другой стене. Любая помощь приветствуется.

MenuSelection

class MenuSelection(ClusterableModel): 
    menu_section = models.CharField(default=None, max_length=100, choices=MENU_CHOICES, unique=True, verbose_name='Menu Section') 
    menu = models.CharField(default=None, max_length=100, choices=MENU, unique=True, verbose_name='Menu') 
    menu_price = models.DecimalField(
     blank=True, 
     null=True, 
     max_digits=5, 
     decimal_places=2, 
     verbose_name='Menu Price', 
     help_text='Numbers only with 2 digital decimal. I.e. 25.00' 
    ) 

    panels = [ 

     MultiFieldPanel(
      [ 
       FieldPanel('menu'), 
       FieldPanel('menu_section'), 
       FieldPanel('menu_price'), 
      ], 
      heading="Menu & Prices", 
      classname="collapsible" 
     ), 
    ] 

Продукт

class ProductMenuPrices(Orderable, MenuSelection): 
    page = ParentalKey('Product', related_name='menu_selection') 


@register_snippet 
class Product(ClusterableModel): 
    product_title = models.CharField(max_length=255, verbose_name='Menu Item') 
    product_description = models.TextField(verbose_name='Product Description', blank=True) 

    panels = [ 
     MultiFieldPanel(
      [ 
       FieldPanel('product_title'), 
       FieldPanel('product_description'), 
       InlinePanel('menu_selection', label="Menu & Price Assignment", max_num=3), 
      ], 
      heading="Product Detail", 
      classname="collapsible" 
     ), 
    ] 

    class Meta: 
     verbose_name = 'Menu Item' 

    def __str__(self): 
     return self.product_title 

ProductModelAdmin

class ProductModelAdmin(ModelAdmin): 
    model = Product 
    menu_label = 'Menu' 
    menu_icon = 'snippet' 
    menu_order = 300 
    add_to_settings_menu = False 
    exclude_from_explorer = False 
    list_display = ('product_title', 'product_description') 
    list_filter = 'product_title', 
    search_fields = 'product_title', 


modeladmin_register(ProductModelAdmin) 
+0

Это о администраторе django или о фрагментах трюков в трясогузке администратора? – dahrens

+0

Извините, они строятся с помощью фрагментов. –

ответ

0

Попробуйте что-то Лик е это:

class Product(ClusterableModel): 

     def get_menu_selection(self): 
      menu_selection = self.menu_selection.count() 
      return menu_selection 

    class ProductModelAdmin(ModelAdmin): 

     list_display = ('product_title', 'get_menu_selection') 

Cheers,

Роберт

0

Если вы хотите, чтобы это было отношение в трясогузка фрагментах администратора вы должны использовать свой подход к нему.

Вот непроверенных пример, основанный на моем коде, принятой в вашем случае использования:

@register_snippet 
class MenuSelection(ClusterableModel): 
    # fields... 

    def product_list(self): 
     return ', '.join([menuproduct.product.name for menuproduct in self.products.all()]) 

    panels = [ 
     # field panels 
     InlinePanel('products', label="Products", min_num=1) 
    ] 


@register_snippet 
class Product(ClusterableModel): 
    name = models.CharField(max_length=100) 
    # fields ... 

    @property 
    def menu_selections(self): 
     MenuSelection.objects.filter(products__in=[self]) 


class MenuSelectionProduct(models.Model): 
    product = models.ForeignKey(Product, on_delete=models.CASCADE) 
    menu_selection = ParentalKey(MenuSelection, related_name='products') 

MenuSelectionProduct определяет ParentalKey с related_name. Таким образом вы сообщите ORM django, чтобы сделать это отношение доступным на MenuSelection. Это позволяет создать InlinePanel на MenuSelection для этой модели. Метод product_list является примером того, как работать с этим отношением далее на объектах MenuSelection. И свойство menu_selection на Product может быть использовано для разрешения отношения с другого направления.

+0

Я думаю, что 'Product' не должен быть' ClusterableModel'. Это было в моем коде, потому что у меня были схожие отношения между моей моделью и другими. Но сейчас я не уверен. – dahrens

Смежные вопросы