0

私は2つのモデルを持つレストランメニューを持っています。 A ProductモデルとMenuSelectionモデルです。製品は多くのメニューに属することができます。 MenuSelectionは、インラインの関係としてProductに追加されます。Wagtail Snippetsインラインオブジェクトを繰り返す

私が抱えている課題は、ModelAdminlist_displayにリストされているメニューオブジェクトです。 ForeignKey関係を作成するか、Inlineオブジェクトを反復処理する@propertyを作成する必要がありますか?私は間違いなく私の経験で別の壁に当たった。どんな助けでも大歓迎です。

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管理者かwagtail管理者のwagtailスニペットについてですか? – dahrens

+0

申し訳ありませんが、これらはスニペットで作成されています。 –

答えて

0

何かのリクをお試しくださいE本:

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') 

乾杯、あなたはこれがあなたがそれのために彼らのアプローチを使用する必要があるADMINセキレイスニペットで関係になりたい場合は

ロバート

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') 

MenuSelectionProductrelated_nameParentalKeyを定義します。ここでは

は、あなたのユースケースに採用した私のコードに基づいて未テストたとえば、あります。この方法でdjango ORMにこの関係を利用可能にするように指示します。MenuSelectionInlinePanelMenuSelectionに作成することができます。 というメソッドは、MenuSelectionオブジェクトでこの関係をどのように処理するかの例です。また、プロパティmenu_selectionProductは、他の方向からの関係を解決するために使用できます。

+0

'Product'は' ClusterableModel'であってはなりません。それは私のモデルと他のモデルとの間に同様の関係があったので私のコードにありました。しかし、私は現時点では分かりません。 – dahrens

関連する問題