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 запросом.