【问题标题】:Cannot have a SlugRelatedField to a FileField in a DRF Serializer?DRF 序列化程序中的 FileField 不能有 SlugRelatedField?
【发布时间】:2021-03-30 20:58:36
【问题描述】:

我有一个带有外键关系的模型与另一个带有 FileField 的模型。我无法使用带有SlugRelatedField 的序列化程序将第一个模型序列化到第二个模型的文件中。这是一些代码:

models.py:

class Foo(models.Model):
  name = models.CharField(max_length=100)
  bar = models.ForeignKey(Bar, blank=True, null=True)

class Bar(models.Model):
  file = models.FileField(blank=True, null=True, upload_to="some_path")

serializers.py:

class FooSerializer(serializers.ModelSerializer):
  class Meta:
    model = Foo
    fields = ("name", "bar")

  bar = serializers.SlugRelatedField(read_only=True, slug_field="file")

但是,当我尝试序列化 Foo 的实例时,我收到以下错误:

UnicodeDecodeError at /api/foo/1/

'utf-8' 编解码器无法解码位置 1 中的字节 0xb5:无效起始字节

有什么建议吗?

【问题讨论】:

    标签: django serialization django-rest-framework


    【解决方案1】:

    我对你的代码做了一些修改试试看。

    在models.py中在Foo之前​​声明Bar模型。

    models.py:

    class Bar(models.Model):
      file = models.FileField(blank=True, null=True, upload_to="some_path")
    
    class Foo(models.Model):
      name = models.CharField(max_length=100)
      bar = models.ForeignKey(Bar, blank=True, null=True)
    

    在 seralizer.py 中,在类元之前定义你的 slug-field。

    serializers.py:

    class FooSerializer(serializers.ModelSerializer):
      
      bar = serializers.SlugRelatedField(read_only=True, slug_field="file")
    
      class Meta:
        model = Foo
        fields = ("name", "bar")
    

    【讨论】:

    • 感谢您的建议。它没有任何效果。
    猜你喜欢
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    相关资源
    最近更新 更多