getattr(): 属性名必须是字符串?

huangapple go评论101阅读模式
英文:

getattr(): attribute name must be string?

问题

我的models.py文件:

  1. class Simple(models.Model):
  2. class Inner(models.TextChoices):
  3. a = 'small', '小型'
  4. b = 'medium', '中型'
  5. c = 'large', '大型'
  6. id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
  7. name = models.CharField(max_length=200)
  8. size = models.TextField(choices=Inner.choices, default='medium', db_index=True)

在使用管理员界面添加时出现以下错误:

  1. TypeError at
  2. /admin/main/simple/add/
  3. getattr(): attribute name must be string

这是我的命令行中的错误:

  1. Traceback (most recent call last):
  2. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
  3. response = get_response(request)
  4. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\core\handlers\base.py", line 179, in _get_response
  5. response = wrapped_callback(request, *callback_args, **callback_kwargs)
  6. extra_context)
  7. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\utils\decorators.py", line 43, in _wrapper
  8. return bound_method(*args, **kwargs)
  9. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\utils\decorators.py", line 130, in _wrapped_view
  10. response = view_func(request, *args, **kwargs)
  11. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\contrib\admin\options.py", line 1534, in changeform_view
  12. return self._changeform_view(request, object_id, form_url, extra_context)
  13. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\contrib\admin\options.py", line 1573, in _changeform_view
  14. form_validated = form.is_valid()
  15. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\forms\forms.py", line 177, in is_valid
  16. return self.is_bound and not self.errors
  17. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\forms\forms.py", line 172, in errors
  18. self.full_clean()
  19. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\forms\forms.py", line 376, in full_clean
  20. self._post_clean()
  21. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\forms\models.py", line 411, in _post_clean
  22. self.validate_unique()
  23. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\forms\models.py", line 420, in validate_unique
  24. self.instance.validate_unique(exclude=exclude)
  25. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\db\models\base.py", line 1007, in validate_unique
  26. date_errors = self._perform_date_checks(date_checks)
  27. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\db\models\base.py", line 1124, in _perform_date_checks
  28. date = getattr(self, unique_for)
  29. TypeError: getattr(): attribute name must be string

当我使用 py manage.py shell 创建时没有问题,但当我使用管理员界面时出现错误。

英文:

My models.py file:

  1. class Simple(models.Model):
  2. class Inner(models.TextChoices):
  3. a = 'small','Small'
  4. b = 'medium','Medium'
  5. c = 'large','Large'
  6. id = models.UUIDField(primary_key=True,default=uuid.uuid4,
  7. editable=False)
  8. name = models.CharField(max_length=200)
  9. size = models.TextField(choices=Inner.choices,default='medium',
  10. db_index=True)

When use admin interface to add I get:

> TypeError at
> /admin/main/simple/add/
>
> getattr(): attribute name must be string

This is my errors in cmd:

  1. Traceback (most recent call last):
  2. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\core\han
  3. dlers\exception.py", line 47, in inner
  4. response = get_response(request)
  5. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\core\han
  6. dlers\base.py", line 179, in _get_response
  7. response = wrapped_callback(request, *callback_args, **callback_kwargs)
  8. extra_context)
  9. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\utils\de
  10. corators.py", line 43, in _wrapper
  11. return bound_method(*args, **kwargs)
  12. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\utils\de
  13. corators.py", line 130, in _wrapped_view
  14. response = view_func(request, *args, **kwargs)
  15. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\contrib\
  16. admin\options.py", line 1534, in changeform_view
  17. return self._changeform_view(request, object_id, form_url, extra_context)
  18. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\contrib\
  19. admin\options.py", line 1573, in _changeform_view
  20. form_validated = form.is_valid()
  21. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\forms\fo
  22. rms.py", line 177, in is_valid
  23. return self.is_bound and not self.errors
  24. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\forms\fo
  25. rms.py", line 172, in errors
  26. self.full_clean()
  27. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\forms\fo
  28. rms.py", line 376, in full_clean
  29. self._post_clean()
  30. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\forms\mo
  31. dels.py", line 411, in _post_clean
  32. self.validate_unique()
  33. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\forms\mo
  34. dels.py", line 420, in validate_unique
  35. self.instance.validate_unique(exclude=exclude)
  36. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\db\model
  37. s\base.py", line 1007, in validate_unique
  38. date_errors = self._perform_date_checks(date_checks)
  39. File "C:\Users\Desktop\real\django3.1\venv\lib\site-packages\django\db\model
  40. s\base.py", line 1124, in _perform_date_checks
  41. date = getattr(self, unique_for)
  42. TypeError: getattr(): attribute name must be string

When I use py manage.py shell to create there is no problem, but when I use the admin interface I get errros.

答案1

得分: 2

你没有正确设置选项的默认值 default= Inner.b

更改为:

  1. size = models.TextField(choices=Inner.choices, default=Inner.b, db_index=True)
英文:

You are not setting the default value for the choices properly default= Inner.b

change :

  1. size = models.TextField(choices=Inner.choices,default='medium',
  2. db_index=True)

to :

  1. size = models.TextField(choices=Inner.choices,default= Inner.b,
  2. db_index=True)

huangapple
  • 本文由 发表于 2023年6月5日 13:38:29
  • 转载请务必保留本文链接:https://go.coder-hub.com/76403723.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定