ValueError: Невозможно назначить «5687»: «Table2.kid» должен быть экземпляром «Table1» - PullRequest
0 голосов
/ 22 марта 2019

Table1 где я получаю данные из сценария управления, который вызывает определенный API.Table2 также получает данные от API.Сценарий xid и kid одинаков, поэтому я реализовал отношение OneToOne, чтобы я мог легко получить связанный элемент из table1 в контексте table2.Table1 должен быть заполнен для заполнения table1, так как только тогда может быть выполнено присвоение экземпляра table2.5687 Уже существует в таблице1, но все равно я получаю сообщение об ошибке:

ValueError: Cannot assign "5687": "Table2.kid" must be a "Table1" instance.

Models.py

class Table1(models.Model):
    xid = models.IntegerField(primary_key=True)
    amount = models.IntegerField()

class Table2(models.Model):
    kid = models.OneToOneField(Table1,primary_key=True, on_delete=models.CASCADE)
    vid = models.IntegerField(null=True, blank=True)
    g_amount = models.IntegerField()

Это мой код сценария, который одинаков для обеих команд управления, которые получают мне данные.

Management/commands/script.py

    """ API CODE """

    data = {
        'kid': kid,
        'vid': vid,
        'g_amount': g_amount

    }
    if Table2.objects.filter(vid=xid).exists() or Table1.objects.filter(xid=kid).exists() is False:
        continue
    else:
        # print(data)
        instance = Table2(**dataff) 
        instance.save()

Или должен быть способ, который мне не нужениметь OneToOne отношения.Используя ORM Джанго, можно построить запрос, который объединит экземпляр из этих двух таблиц в одну и поместит его в виртуальную таблицу, чтобы я не потерял возможности ORM.

1 Ответ

0 голосов
/ 22 марта 2019

Условная проверка на поле моделей применяется после объявления данных dict. Он будет объявлен после условия if, чтобы можно было сохранить dict с условием.

...