Как сохранить внешний ключ в Django без экземпляра, но с жестко закодированным значением - PullRequest
0 голосов
/ 10 ноября 2019

Предположим, у меня есть эти 2 модели:

class Shipment(models.Model):
    id = models.BigIntegerField(primary_key=True)
    order_id = models.ForeignKey('orders.Order', null=True, blank=True, on_delete=models.SET_NULL)

class Order(models.Model):
    id = models.BigIntegerField(primary_key=True)
    ean = models.BigIntegerField(null=True, blank=True)

Заказы уже внесены в базу данных, теперь я просто хочу связать поставки с соответствующим заказом. Но у меня есть список жестко закодированных JSON для заполнения моей модели отгрузки.

{
"shipmentId": 541757635,
"orderId": 23598235,
}

Таким образом, orderId в этом JSON представляет первичный ключ модели Order, который уже присутствует в базе данных. ,Как я могу зациклить это, чтобы связать модель отгрузки с правильной моделью заказа, основанной на идентификаторе заказа?

Может быть, цикл такой:

for shipment in shipments:
    shipment = Shipment.objects.create(id=shipment.shipmentId, order_id=shipment.orderId

Но возможно ли это, потому что нетНапример, просто жестко закодированное значение в JSON?

ОБНОВЛЕНИЕ: Поэтому, когда я пытаюсь использовать этот цикл, я получаю эту ошибку:

    self.field.remote_field.model._meta.object_name,
ValueError: Cannot assign "2647598550": "Shipment.order_id" must be a "Order" instance.

1 Ответ

0 голосов
/ 10 ноября 2019

Ваш пример цикла должен это сделать. Вы можете указать в качестве идентификатора все, что захотите, до тех пор, пока вы делаете это перед вызовом .save(). Построение экземпляра с .create(id=foo) должно сделать именно это.

Чтобы установить поле внешнего ключа, вы можете сначала get связанный экземпляр, используя идентификатор с Order.objects.get(id=order_id).

Пример кода:

for shipment in shipments:
    order = Order.objects.get(id=shipment.orderId)
    shipment = Shipment.objects.create(id=shipment.shipmentId, 
                                       order_id=order)

Похожие: Ошибка Django. Невозможно назначить должен быть экземпляр

Источник: https://docs.djangoproject.com/en/2.2/ref/models/instances/#explicitly-specifying-auto-primary-key-values

...