Ссылка на 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 обязательным или нет.

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