首页 > 解决方案 > Django get_or_create ValueError

问题描述

尝试将 DataFrame 中的行添加到 Django 模型中。

模型.py

class CreditIndex_TEST(models.Model):
    loanBook = models.ForeignKey(LoanBooks, on_delete=models.CASCADE)
    run_date = models.DateField()
    index_date = models.DateField()
    index_CD = models.IntegerField()
    Index_value = models.FloatField()

    class Meta:
        constraints = [
            models.UniqueConstraint(fields= ['loanBook','run_date','index_date','index_CD'], name='unique_CreditIndexPair')
            ]

视图.py

for index, row in tempDf.iterrows():
            obj, created = CreditIndex_TEST.objects.get_or_create(
                loanBook=dbname,
                run_date= run_date,
                index_date=row['Date'],
                index_CD=1,
                Index_value=row['CreditIndex_CD1']
            )

错误: :

ValueError: Field 'id' expected a number but got 'Botswana_TU'.

我不明白为什么我被要求指定id. 我试图添加到模型中的记录不存在,因此 Django 应该创建它并分配id,而不是指望我吗?

编辑(完整追溯):

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/gunthermarais/credit-risk/django/RiskLab/Provisions/views.py", line 48, in macroGUI
    Index_value=row['CreditIndex_CD1']
  File "/usr/local/lib/python3.7/site-packages/django/db/models/manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)

  File "/usr/local/lib/python3.7/site-packages/django/db/models/query.py", line 575, in update_or_create
    obj = self.select_for_update().get(**kwargs)
  File "/usr/local/lib/python3.7/site-packages/django/db/models/query.py", line 404, in get
    clone = self._chain() if self.query.combinator else self.filter(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/django/db/models/query.py", line 904, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/django/db/models/query.py", line 923, in _filter_or_exclude
    clone.query.add_q(Q(*args, **kwargs))
  File "/usr/local/lib/python3.7/site-packages/django/db/models/sql/query.py", line 1350, in add_q
    clause, _ = self._add_q(q_object, self.used_aliases)
  File "/usr/local/lib/python3.7/site-packages/django/db/models/sql/query.py", line 1381, in _add_q
    check_filterable=check_filterable,
  File "/usr/local/lib/python3.7/site-packages/django/db/models/sql/query.py", line 1311, in build_filter
    condition = self.build_lookup(lookups, col, value)
  File "/usr/local/lib/python3.7/site-packages/django/db/models/sql/query.py", line 1165, in build_lookup
    lookup = lookup_class(lhs, rhs)
  File "/usr/local/lib/python3.7/site-packages/django/db/models/lookups.py", line 22, in __init__
    self.rhs = self.get_prep_lookup()
  File "/usr/local/lib/python3.7/site-packages/django/db/models/fields/related_lookups.py", line 115, in get_prep_lookup
    self.rhs = target_field.get_prep_value(self.rhs)
  File "/usr/local/lib/python3.7/site-packages/django/db/models/fields/__init__.py", line 1776, in get_prep_value
    ) from e
ValueError: Field 'id' expected a number but got 'Botswana_TU'.

标签: djangodjango-models

解决方案


推荐阅读