Как передать ForeignKey в dict для создания объекта Model. Django - PullRequest
1 голос
/ 10 июля 2020

Я создал одну модель для хранения имени пользователя и места

class UserDetails(models.Model):
    name = models.CharField(max_length=50)
    place = models.ForeignKey(City, on_delete=models.CASECADE)

У меня есть один JSON файл. У меня есть данные более чем 1000 пользователей. например,

[
    {"name": "A", "place":1},
    {"name": "B", "place":3},
    {"name": "C", "place":4},
    {"name": "D", "place":1},
    ..
    ..
]

Поле «Место» связано с идентификатором объекта «Город». Когда я использую синтаксис ниже

UserDetails.objects.create(**{"name":"A", "place": 3})

, а затем получаю сообщение об ошибке, я знаю, что вместо передачи идентификатора места мне нужно передать obj, например:

loc = City.object.get(id=3)
UserDetails.objects.create(**{"name":"A", "place": loc})

Это нормально, но у меня большой объем данных, как передать идентификатор места или следует использовать bulk_create для сохранения всех JSON данных в модели?

1 Ответ

2 голосов
/ 10 июля 2020

Вместо этого вы можете использовать place_id, это «двойное поле», которое создается Django, которое хранится в базе данных и хранит ссылку (обычно первичный ключ) на целевую модель, учитывая, конечно, такую ​​Place уже существует:

user_details = [
    UserDetails(name=record['name'], <b>place_id=record['place']</b>)
    for record in list_of_records
]
UserDetails.object.bulk_create(user_details)

Здесь list_of_records, таким образом, ваш список словарей. Мы можем использовать .bulk_create(…) [Django -doc] , чтобы добавить все UserDetails в небольшое количество запросов вставки.

...