【问题标题】:ValueError: The 'photo' attribute has no file associated with itValueError:“照片”属性没有与之关联的文件
【发布时间】:2018-07-09 15:13:03
【问题描述】:

我同时使用 react 和 django,我似乎遇到了一个大问题。我在这个网站上找到的大多数解决方案都建议检查模板是否有重复,但我没有使用 django 的默认模板引擎。当我使用 model_to_dict(driver_object) 时出现此错误。驱动程序对象有一张我在模型中设置为 null=true 的照片。请帮助我,我不知道如何解决它

models.py

class Person(SoftDeletionModel):
    name = CharField(max_length=64)
    email = CharField(blank=True, null=True, max_length=64)
    contact_no = PositiveIntegerField()
    address = CharField(max_length=256)
    birth_date = DateField()
    sex = CharField(max_length=1, choices=SEX)
    photo = FileField(default='client/src/images/users.png')


class Driver(Person):
    user = OneToOneField(User, on_delete=models.CASCADE, null=True)
    application_date = DateField()

views.py

  user_type = SignInView.get_user_type(user)
    user_staff = SignInView.get_user_staff(user_type, user)
    return Response(data={
        "token": token.key,
        "user": model_to_dict(user),
        "user_type": user_type,
        "user_staff": model_to_dict(user_staff)
    }, status=200)

 @staticmethod
def get_user_staff(user_type, user):
    if user_type == "system_admin":
        return user
    if user_type == "driver":
        return Driver.objects.get(user=user)
    if user_type == "supervisor":
        return Supervisor.objects.get(user=user)
    if user_type == "operations_manager":
        return OperationsManager.objects.get(user=user)
    if user_type == "clerk":
        return Clerk.objects.get(user=user)

我认为问题的根源在于 django 抛出错误而不是在照片为 null 时返回 None。有什么解决方法吗?请帮忙

追溯

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/handlers/exception.py", line 35, in inner
    response = get_response(request)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/handlers/base.py", line 158, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/handlers/base.py", line 156, in _get_response
    response = response.render()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/template/response.py", line 106, in render
    self.content = self.rendered_content
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/rest_framework/response.py", line 72, in rendered_content
    ret = renderer.render(self.data, accepted_media_type, context)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/rest_framework/renderers.py", line 105, in render
    allow_nan=not self.strict, separators=separators
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/rest_framework/utils/json.py", line 28, in dumps
    return json.dumps(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/__init__.py", line 238, in dumps
    **kw).encode(obj)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/rest_framework/utils/encoders.py", line 67, in default
    return tuple(item for item in obj)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/rest_framework/utils/encoders.py", line 67, in <genexpr>
    return tuple(item for item in obj)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/files/base.py", line 91, in __iter__
    for chunk in self.chunks():
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/files/base.py", line 66, in chunks
    self.seek(0)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/files/utils.py", line 20, in <lambda>
    seek = property(lambda self: self.file.seek)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/fields/files.py", line 41, in _get_file
    self._require_file()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/fields/files.py", line 38, in _require_file
    raise ValueError("The '%s' attribute has no file associated with it." % self.field.name)
ValueError: The 'photo' attribute has no file associated with it.

【问题讨论】:

  • 请发布完整的回溯。我认为该错误与您发布的内容无关。
  • 您好!我用回溯编辑它
  • 你为什么不使用序列化程序?这正是他们的目的。您绕过了 DRF 的大部分要点。

标签: python django reactjs django-rest-framework


【解决方案1】:

我通过在返回响应之前将驱动程序对象放入序列化程序来修复它,如下所示:

    if user_type == "driver":
        driver = DriverSerializer(Driver.objects.get(user=user))
        return driver.data

【讨论】:

  • 这似乎与您访问此属性的方式有关,可能在您的模板中。
  • 自客户端渲染以来,我将数据存储在 localStorage 中。但就是这样,所以我不知道为什么会这样
猜你喜欢
  • 2017-01-04
  • 2023-02-21
  • 2021-02-11
  • 2020-03-08
  • 2020-08-11
  • 2016-02-06
  • 2019-02-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多