Как я могу запретить встроенным полям ссылаться на последний созданный объект в Django Admin - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть модель PlacedOrder, на которую ссылаются другие модели, использующие OneToOneField и ForeignKey. Поэтому я использую StackedTabularInline для рендеринга на моей PlacedOrderAdmin модели.

Странное поведение в том, что когда я запускаю свое приложение django, я могу без проблем создать новый объект PlacedOrder, но после этого, когда я пытаюсь создать другой объект, поля в строках уже заполнены содержимым объекта что я только что создал, и я не могу создать новый объект, независимо от того, что я пытаюсь, он постоянно показывает мне ошибку «Пожалуйста, исправьте ошибки ниже.»

Только поля, принадлежащие строковым значениям, поля из модели PlacedOrder являются «чистыми». После перезапуска django я вижу все созданные объекты, и их данные кажутся правильными.

часть моделей:

class PlacedOrder(models.Model):
    id = models.UUIDField(
        primary_key=True,
        default=uuid.uuid4(),
        editable=False
    )
    ...
    total = models.DecimalField(
        _('total'),
        max_digits=8,
        decimal_places=2
    )


class OrderStatus(models.Model):
    placed_order = models.OneToOneField(
        PlacedOrder,
        on_delete=models.CASCADE
    )
    status = models.CharField(
        _('status'),
        choices=STATUS_CHOICES,
        max_length=30,
    )

Вот одна из строчек:

class OrderStatusInline(nested_admin.NestedTabularInline):
    model = app_models.OrderStatus

и Заказ

@admin.register(app_models.PlacedOrder)
class OrderAdmin(nested_admin.NestedModelAdmin):
    inlines = (OrderStatusInline, OrderPaymentInline, OrderDeliveryInline, SelectedProductInline, )

Исправлено

Итак, я обнаружил, что проблема не имеет ничего общего с тем, что я написал здесь, это было то, как я объявил id внутри PlacedOrder.

На моей исходной модели по умолчанию было установлено значение uuid.uuid4(), но это создавало все проблемы, как только я изменил его на uuid.uuid4, все было в порядке.

1 Ответ

0 голосов
/ 04 апреля 2019

Я думаю, что проблема в том, что при отношении OneToOne фактическое поле, определяющее отношение, должно быть в встроенной модели, а не в родительской - точно так же, как для ForeignKey

Взгляните на этот пост для получения дополнительной информации: Django Admin: OneToOne Relation как Inline?

...