Django Bulk_create() с несуществующим ForeignKey
У меня есть 2 модели. Для простоты я удалил все ненужные поля.
class User(models.Model):
id = models.CharField(max_length=36, primary_key=True, null=False)
age = models.IntegerFiels(default=-1)
и
class Device(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
Через API я получаю информацию об устройствах и создаю список с устройствами.
devices = []
for device_data in data:
devices.append(
Device(
user_id=device_data("user_id")
)
)
Получив список устройств, я добавляю его в базу данных.
Проблема в том, что если при создании Устройства я указал user_id, которого нет в базе данных, то у меня произойдет сбой, потому что я пытаюсь связать с несуществующим идентификатором.
Теперь, чтобы обойти это, я делаю следующее:
devices = []
users = []
for device_data in data:
users.append(
User(
id=device_data("user_id", age = -1)
)
)
devices.append(
Device(
user_id=device_data("user_id")
)
)
Затем при сохранении:
User.objects.bulk_create(users, ignore_conflicts=True)
Device.objects.bulk_create(devices, ignore_conflicts=True)
User.objects.filter(age=-1).delete()
Как сделать, чтобы при сохранении, если указанный user_id не существует, это устройство не добавлялось?
ОБНОВЛЕНО:
Другое решение — изменить поле
User.age = models.IntegerFiels(null=True)
и
Device.user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
После этого я могу сохранять устройства без пользователей.
Device.objects.bulk_create(devices, ignore_conflicts=True)
После этого выполните:Device.objects.filter(user__age__isnull=True).delete().
Это работает, но мне не нравится то, что нужно проверять возраст, а не самого пользователя.