Ошибка значения: не удается назначить «5687»: «Table2.kid» должен быть экземпляром «Table1»

#python #django #python-3.x #django-models #django-views

#python #django #python-3.x #django-models #django-views

Вопрос:

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

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 Django, можно создать запрос, который объединит экземпляр из этих двух таблиц в одну и поместит его в виртуальную таблицу, чтобы я не терял возможности ORM.

Комментарии:

1. 5687 является одним из kid

2. попробуйте это data = { 'kid': Table1.objects.get(xid=kid), 'vid': vid, 'g_amount': g_amount }

3. @JPG попробовал ваш контекст и эта ошибка — dashboard.models.DoesNotExist: Table1 matching query does not exist. Хотя экземпляр с 5687 уже существует в таблице 1

Ответ №1:

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