Ссылка на pk в связанных с Django моделях
Я изучаю Django и делаю проект, в котором у меня есть три модели со следующими отношениями:
#models.py
class Model1(models.Model):
status = models.CharField(max_length = ....)
class Model2(models.Model):
model1 = models.ForeignKey(Model1, ....)
name = models.CharField(max_length = ....)
class Model3(models.Model):
model2 = models.ForeignKey(Model2, ....)
name = models.CharField(max_length = ....)
Я хочу обновить поле status в моей Model1 на основе логики, которая происходит в моем views.py на экземпляре Model3, т.е.
views.py
def model3_view(request, pk):
model1 = get_object_or_404(Model1, pk=pk)
model3 = Model3.objects.filter(model1_id=model1.pk)
my logic goes here....
if <my logic outcome> == True:
model1_status = Model1.objects.update_or_create(status='closed', pk=model1.pk)
Однако я получаю ошибку UNIQUE constraint failed: model1_model1.id.
Я попытался сослаться на пк экземпляра model2 и это работает нормально, т.е. model1_status = Model1.objects.update_or_create(status='closed', pk=model2.pk), но не смог понять, как я могу сделать это для одного уровня выше, т.е. для пк model1...
Ошибка Unique скорее всего связана с тем, что update_or_create
просто пытается создать и затем получает конфликтующие первичные ключи.
Потому что вы уже получаете Model1 здесь: model1 = get_object_or_404(Model1, pk=pk)
вы можете просто заменить update_or_create
на:
model1.status = 'closed'
model1.save()
Примечание: Изначально я не разместил это как ответ, потому что не был уверен, является ли update_or_create
обязательным или нет.