#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 можно было сохранить с условием.