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

wagtail admin에서 django admin 또는 about wagtail snippets에 관한 내용입니까? – 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') 

건배, 당신이 당신이 그것을 위해 자신의 방법을 사용할 필요가 관리자에 할미새 조각에 관계하고 싶다면

로버트

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에게 MenuSelection에이 관계를 사용할 수있게합니다. 모델을 통해 을 MenuSelection에 만들 수 있습니다. 메서드는 MenuSelection 개체에 대해이 관계를 사용하는 방법에 대한 예제입니다. 그리고 속성 menu_selectionProduct 다른 방향에서 관계를 해결하는 데 사용할 수 있습니다.

+0

'Product'는'ClusterableModel'이 아니어야합니다. 그것은 내 모델과 다른 모델 사이에 비슷한 관계가 있었기 때문에 제 코드에있었습니다. 그러나 나는 그 순간을 확신하지 못한다. – dahrens