Django bulk_create с Null значением

models.py

class control(models.Model):
    amount = models.IntegerField()
    driver = models.ForeignKey(driver, on_delete=models.CASCADE, null=True, blank=True)

views.py

controlValues = [
    (1,1,1),
    (2,8,None)
]
control.objects.bulk_create([
    control(
        id = i[0],
        amount = i[1],
        driver = driver(id = i[2])
    ) for i in controlValues], ignore_conflicts=True
)

Получил ошибку: bulk_create() запрещено для предотвращения потери данных из-за несохраненного связанного объекта 'driver'. Как я могу установить Null для драйвера? Я использую mysql.

Если значение None, вы не должны строить driver модель с этим объектом, а работать с:

control.objects.bulk_create([
    control(
        id=id,
        amount=amount,
        driver=driver(id=dr_id) if dr_id is not None else None
    ) for id, amount, dr_id in controlValues],
    ignore_conflicts=True
)

или гораздо проще:

control.objects.bulk_create([
    control(
        id=id,
        amount=amount,
        driver_id=dr_id
    ) for id, amount, dr_id in controlValues],
    ignore_conflicts=True
)

Примечание: Модели в Django пишутся в PascalCase, а не snake_case, поэтому вы можете переименовать модель из driver в Driver.

Вернуться на верх