Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 遍历Wagtail代码段内联对象_Django_Django Models_Django Templates_Django Admin_Wagtail - Fatal编程技术网

Django 遍历Wagtail代码段内联对象

Django 遍历Wagtail代码段内联对象,django,django-models,django-templates,django-admin,wagtail,Django,Django Models,Django Templates,Django Admin,Wagtail,我有一份有两种型号的餐厅菜单。产品型号和菜单选择型号。一个产品可以属于许多菜单。菜单选择作为内联关系添加到产品 我面临的挑战是在ModelAdminlist\u display中列出菜单对象。我需要创建ForeignKey关系还是创建一个@property来迭代内联对象?在我的经历中,我肯定遇到了另一面墙。任何帮助都将不胜感激 菜单选择 class MenuSelection(ClusterableModel): menu_section = models.CharField(defau

我有一份有两种型号的餐厅菜单。
产品
型号和
菜单选择
型号。一个产品可以属于许多菜单。
菜单选择
作为内联关系添加到
产品

我面临的挑战是在
ModelAdmin
list\u display
中列出菜单对象。我需要创建ForeignKey关系还是创建一个@property来迭代内联对象?在我的经历中,我肯定遇到了另一面墙。任何帮助都将不胜感激

菜单选择

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 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)
产品

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

试着这样做:

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


Robert

如果你想在wagtail snippets admin中建立关系,你需要使用他们的方法

下面是一个基于我的代码的未经测试的示例,适用于您的用例:

@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
。通过这种方式,您可以告诉django ORM使此关系在
菜单选择中可用。
这使您能够在
MenuSelection
上为此模型创建
InlinePanel

方法
product\u list
是如何在
MenuSelection
对象上进一步处理此关系的示例。而
产品
上的属性
菜单_选项
可用于从另一个方向解析关系。

这是关于django admin还是关于wagtail admin中的wagtail片段?抱歉,这些都是用片段构建的。我猜
产品
不能是
ClusterableModel
。它出现在我的代码中,因为我的模型和其他模型之间有着相似的关系。但我现在不确定。