Почему мой Django объект не сохраняется в базе данных? - PullRequest
0 голосов
/ 11 февраля 2020

Я пишу тесты в Django проекте, и у меня есть несколько фабрик, настроенных для создания тестового контента. Теперь у меня возникла проблема, из-за которой адрес электронной почты не сохраняется в базе данных:

device = DeviceFactory.create()
device.owner.email = 'a@b.c'
device.save()

print(device.owner.email)  # prints out 'a@b.c'
print(device.id)  # prints out 1
d = Device.objects.get(id=device.id)  # get the object from the DB again
print(d.owner.email)  # prints out jon.avery@ourcompany.com (or any other mock email address the factory creates)

Кто-нибудь знает, почему это не сохраняет запись в базе данных? Все советы приветствуются!

Ответы [ 2 ]

2 голосов
/ 11 февраля 2020

email связан с вашей Owner моделью, а не Device моделью. Итак, вам нужно позвонить на save() метод owner, а не device

device.owner.email = 'a@b.c'
device.<b>owner.save()</b>
0 голосов
/ 11 февраля 2020

Если вам нужно простое решение, вы должны вызвать save вашего поля owner, потому что это другая модель, которая содержит email.

device.owner.save()

Но обычно я бы порекомендовал вам: переопределите ваш save метод вашей Device модели. Поэтому в следующий раз вам не придется помнить, что вы должны позвонить save для внутренних полей.

class Device(models.Model):
    ...
    def save(self, *args, **kwargs):
        self.owner.save()
        super().save(*args, **kwargs)
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...