分配外键会创建一个新对象

问题描述 投票:0回答:1

我正在尝试在django中创建一对多关系,目前为止一切正常。

@register_snippet
class CarPart(models.Model):
    title = models.CharField(max_length=50)

    class Meta:
        verbose_name_plural = 'Car Parts'

    def __str__(self):
        return self.title

class CarParts(CarPart):
    source_page = ParentalKey(
        'home.CarPage', related_name='carparts'
    )

    carpart = models.ForeignKey(
        CarPart,
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name='+'
    )

    panels = [
        SnippetChooserPanel('catpart'),
    ]

class CarPage(BasePage):
    content_panels = BasePage.content_panels + [
       InlinePanel('carparts', label="Car Part"),
    ]
    def get_context(self, request):
       context = super().get_context(request)

    return context

这很好,我可以为汽车分配多个汽车零件,但是问题是,每当我分配汽车零件时,它都会自动创建一个新的空对象,而不是汽车零件摘要或表格中的原始数据。

我做的时候显示正确的部分

{% for part in car.carparts.all %} 
    {{ part.title }}
{% endfor %}

但是当我从汽车零件代码段中删除空对象时,它将删除汽车中的汽车零件,并且因为删除了相关的汽车零件,所以for循环似乎没有显示任何值。我不明白为什么它要创建新的空对象却要分配正确的ID。

赞:

如果我从页面编辑器中选择汽车零件engine并保存,它会创建一个新的空对象,但ID似乎正确。它以页面布局显示引擎,但是当我删除新的空对象时,相关的引擎关联消失了。

django django-models wagtail wagtail-snippet
1个回答
0
投票

CartParts不应继承自CarPart,也应具有外键。

class CarParts(models.Model):
    source_page = ParentalKey(
        'home.CarPage', related_name='carparts'
    )

    carpart = models.ForeignKey(
        CarPart,
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name='+'
    )

    panels = [
        SnippetChooserPanel('catpart'),
    ]
© www.soinside.com 2019 - 2024. All rights reserved.