Django rest_framework при создании объекта говорит, что get() вернул более одного запроса - он вернул 2

Я создаю api, где каждый раз, когда кто-то запрашивает ремонт, он также сохраняется в таблице инспекции

когда я пытаюсь отправить сообщение в postman

{
"reqdescription": "test",
"techofficeid": "ICT"
}

это строка запроса

|reqid|reqdescription|reqdate|officerequestor|techofficeid|
| 36  | test         |2022...|    HR         |     ICT    |

пока это ряд проверки

|inspectid|reqid| etc...|    description    |
| 5       | 36  |.......|Request object (36)|

вместо теста, почему это Request object (36)

это мой файл signals.py

@receiver(post_save, sender=Request)
def create_transaction_log(sender, instance, created, **kwargs):
if created:
  Inspection.objects.create(reqid=Request.objects.get(reqid=instance.reqid),
    description=Request.objects.get(reqdescription=instance.reqdescription),
    reqdate=str(datetime.now().strftime('%Y-%m-%d')))

Мое предположение связано с OneToOneField, но возможно я ошибаюсь

Надеюсь, кто-нибудь сможет помочь

models.py

class Inspection(models.Model):
inspectid = models.AutoField(primary_key=True)
reqid = models.OneToOneField('Request', models.DO_NOTHING, db_column='reqid', blank=True, null=True)
insdate = models.DateField(blank=True, null=True)
diagnosis = models.CharField(max_length=100, blank=True, null=True)
inspector = models.ForeignKey('Technician', models.DO_NOTHING, db_column='inspector', blank=True, null=True)
isinspected = models.BooleanField(default='False', blank=True, null=True)
description = models.CharField(max_length=100, blank=True, null=True)
reqdate = models.DateField(blank=True, null=True)

class Meta:
    managed = False
    db_table = 'inspection'

class Request(models.Model):
reqid = models.AutoField(primary_key=True)
reqdescription = models.CharField(max_length=100, blank=True, null=True)
reqdate = models.DateField(auto_now_add = True, blank=True, null=True)
officerequestor = models.ForeignKey('Office', models.DO_NOTHING, db_column='officerequestor', blank=True, null=True)
techofficeid = models.ForeignKey('Technicianoffice', models.DO_NOTHING, db_column='techofficeid', blank=True, null=True)

class Meta:
    managed = False
    db_table = 'request'

В сигнале create_transaction_log у вас уже есть объект Request в параметре instance. Поэтому вам не нужно делать Request.objects.get... там. Вместо этого используйте instance, например, так:

@receiver(post_save, sender=Request)
def create_transaction_log(sender, instance, created, **kwargs):
if created:
  Inspection.objects.create(
    reqid=instance,
    description=instance.reqdescription,
    reqdate=instance.reqdate,
  )

BTW, я бы не стал выбирать Request имя для модели, чтобы избежать ассоциаций с HTTP запросом.

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