Django Field name `` is not valid for model 解决方案

Django Field name `` is not valid for model 解决方案

当使用 rest-framework的时候, 我在创建完成 serializer后,指定了对应的metadata时候,当通过ModelViewSet 来创建 对应的API时,出现问题: Django Field name content_html is not valid for model。 代码如下:

对于 serializer
class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = ['title', 'category', 'desc', 'content_html', 'created_time']


class PostViewSet(viewsets.ModelViewSet):
    serializer_class = PostSerializer
    queryset = Post.objects.filter(status=Post.STATUS_NORMAL)

问题是因为对应的model 没有对应的content_html 字段而导致的问题,因此要么去掉content_html,要么在model中创建该字段并makemigrations migrate下。

核心要注意的便是: 将字段进行一一核实,防止出现非常奇怪的问题。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这个问题通常出现在使用 Django Rest Framework (DRF) 进行序列化时,当 serializer 中的某个字段在创建 Post 对象时不支持写入时,会出现这个错误。解决这个问题的方法有以下几种: 1. 将字段设置为只读(read-only):在 serializer 中,可以通过设置 `read_only=True` 将字段设置为只读,这样在创建对象时就不能写入该字段。 例如,假设 serializer 中的某个字段 `field_name` 不支持写入,可以这样设置: ```python class PostUpdateSerializer(serializers.ModelSerializer): field_name = serializers.ReadOnlyField() class Meta: model = Post fields = ['title', 'content', 'field_name'] ``` 2. 重写 `create()` 方法:在 serializer 中,可以重写 `create()` 方法,在创建对象时对不支持写入的字段进行特殊处理。 例如,假设 serializer 中的某个字段 `field_name` 不支持写入,可以这样重写 `create()` 方法: ```python class PostUpdateSerializer(serializers.ModelSerializer): field_name = serializers.CharField() class Meta: model = Post fields = ['title', 'content', 'field_name'] def create(self, validated_data): field_name = validated_data.pop('field_name', None) post = Post.objects.create(**validated_data) if field_name: # 对字段进行特殊处理 pass return post ``` 3. 检查 model 中的字段:如果以上两种方法都无法解决问题,可能是因为 model 中的某个字段不支持写入。可以检查 model 中的字段,确保所有需要写入的字段都被正确地定义为可写字段。 例如,如果 `field_name` 在 model 中被定义为只读字段,那么在 serializer 中也必须将其设置为只读字段: ```python class Post(models.Model): title = models.CharField(max_length=100) content = models.TextField() field_name = models.CharField(max_length=100, readonly=True) ``` ```python class PostUpdateSerializer(serializers.ModelSerializer): field_name = serializers.ReadOnlyField() class Meta: model = Post fields = ['title', 'content', 'field_name'] ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Volavion

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值