Присвоение внешнего ключа создает новый объект - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь создать отношение «один ко многим» в 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 %}
* 1008 отображаются правильные детали. * Но когда я удаляю пустые объекты из фрагмента автозапчастей, он удаляет автозапчасти в автомобиле, и значение l oop, похоже, не показывает никакого значения, поскольку удаляются связанные автозапчасти. Я не понимаю, почему он создает новые пустые объекты, но назначает правильные идентификаторы.

Например:

Если я выберу автомобильную деталь engine в редакторе страниц и сохраню ее - она ​​создаст новый пустой объект, но идентификатор кажется правильным. Он показывает движок в макете страницы, но когда я удаляю новый пустой объект, связанное с ним ядро ​​исчезает.

1 Ответ

1 голос
/ 14 февраля 2020

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'),
    ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...