【问题标题】:Python TypeError: Required argument 'offset' (pos 1) not foundPython TypeError:找不到所需的参数'offset'(位置1)
【发布时间】:2019-09-03 23:28:57
【问题描述】:

我在实例化对象表单模型类时收到错误TypeError: Required argument 'offset' (pos 1) not foundusers like a = users() 此类具有使用vars() 函数从列表service_data 创建的动态属性。

 class users(models.Model):
      for i, j in zip(config.service_data[0], config.service_data[1]):
          vars()[i] = CrudAPI.create_db_field(j)

这是 create_db_field 方法代码:

def create_db_field(test):
      if (test == "char50"):
          return models.CharField(max_length=50, blank=True)
      if (test == "text"):
          return models.TextField(blank=True)
      if (test == "date"):
          return models.DateField(blank=True)
      if (test == "datetime"):
          return models.DateTimeField(default=datetime.timezone, blank=True)
      if (test == "number"):
          return models.FloatField(blank=True)

这是我用来动态创建这些属性的列表:

service_data=[["username","password"],[],["email","password"]]

tarting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
[13/Apr/2019 11:33:59] "GET / HTTP/1.1" 200 17234
[13/Apr/2019 11:34:02] "GET /login/ HTTP/1.1" 200 1382
True
Internal Server Error: /login_/
Traceback (most recent call last):
  File "F:\softs\Anaconda3\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "F:\softs\Anaconda3\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "F:\softs\Anaconda3\lib\site-packages\django\core\handlers\base.py", line 124, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "F:\projects\PycharmProjects\roottic\root\views.py", line 61, in login_
    a = users()
  File "F:\softs\Anaconda3\lib\site-packages\django\db\models\base.py", line 459, in __init__
    val = field.get_default()
  File "F:\softs\Anaconda3\lib\site-packages\django\db\models\fields\__init__.py", line 798, in get_default
    return self._get_default()
TypeError: Required argument 'offset' (pos 1) not found
[13/Apr/2019 11:34:04] "POST /login_/ HTTP/1.1" 500 75786

我不明白它有什么问题

【问题讨论】:

  • 请添加完整回溯。
  • service_data 将与此 zip 函数一起导致 empty 循环。
  • service_data 不是空列表
  • 没错,但zip 函数将zip(["username","password"],[]),因此会导致空迭代。
  • 我填了但是同样的错误

标签: python django django-models


【解决方案1】:

在您的create_db_field 方法中,您将“日期时间”选项定义为返回一个默认为datetime.timezone 的日期时间字段。这就是当您创建 users 的新实例而不设置该字段时将调用的内容。但是timezone() 是一个函数,它需要一个参数offset,你没有传递它。

我怀疑您不是要使用标准 datetime 模块中的该函数,而是使用 Django 函数 timezone.now

from django.utils import timezone
...

    return models.DateTimeField(default=timezone.now, blank=True)

(我必须说,与您的错误无关,这都是一件很奇怪的事情;有什么意义?Django 模型反映数据库中的表,为什么要尝试动态定义它们?)

【讨论】:

    猜你喜欢
    • 2011-09-22
    • 2017-05-26
    • 2015-10-16
    • 2019-05-10
    • 2019-06-20
    • 2021-04-09
    • 2015-09-29
    • 2018-12-11
    • 1970-01-01
    相关资源
    最近更新 更多