【问题标题】:Django Rest Framework HTML POST form giving error message This field is required after submittingDjango Rest Framework HTML POST 表单给出错误消息 提交后此字段为必填项
【发布时间】:2015-11-22 09:12:35
【问题描述】:

我的models.py是

class Genre(models.Model):
    genre = models.CharField(max_length=200)
    def __str__(self):
        return self.genre


class Movies(models.Model):
    popularity=models.DecimalField(max_digits=5, decimal_places=2)
    director = models.CharField(max_length=200)
    genre = models.ManyToManyField(Genre, blank=True, null=True)
    score= models.DecimalField(max_digits=5, decimal_places=2)
    name = models.CharField(max_length=200)
    def __str__(self):
        return self.name

这是我的序列化器和视图集

# Serializers define the API representation.
class MoviesSerializer(serializers.ModelSerializer):
    #genre =  serializers.StringRelatedField(many=True)
    genre =  serializers.SlugRelatedField(queryset=Genre.objects.all(),many=True,slug_field='genre' )
    class Meta:
        model = Movies
        fields = ('popularity', 'director', 'genre', 'score','name')

# ViewSets define the view behavior.
class MovieViewSet(viewsets.ModelViewSet):
    queryset = Movies.objects.all()
    serializer_class = MoviesSerializer

# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
router.register(r'movies', MovieViewSet)

当我以Superuser 登录时,我能够看到 HTML POST 表单。但是在提交HTML POST 表单时收到错误消息This field is required。代码中的错误是什么。感谢您提前提供帮助。

【问题讨论】:

  • 您确定您的Movie 对象有Genre 对象吗?
  • 如何检查。在django admin 部分中创建新的Movie 时,我可以选择一个或多个Genre 对象
  • 对于movie 上的rest api 调用,我得到了我选择的Genre 对象。 [ { "popularity": "1.89", "director": "Dib", "genre": [ "test1", "test2" ], "score": "2.80", "name": "Test Movie" } ]
  • 您能否添加屏幕截图或完整的错误消息。我不明白“但是对于类型下拉列表,我看不到任何选项。获取消息没有要选择的项目。”这个下拉列表在哪里?请添加模板、截图帮助我们理解
  • 我添加了截图。对于第二个屏幕HTML POST form,请参阅Genre 下拉列表No Item to Select

标签: python django django-models django-rest-framework django-serializer


【解决方案1】:

您应该为此使用 SlugRelatedField 而不是 StringRelatedField。

【讨论】:

  • 我已经尝试过genre = serializers.SlugRelatedField(many=True,read_only=True,slug_field='genre' ) 但为此,即使Genre 下拉字段也不会出现在HTML POST Form
  • Your line won't work with read_only=True 改为设置查询集
  • 现在我也无法使用POST FORM 创建一个新的movie。提交后所有字段都出现验证错误This field is required.。虽然我已经为所有提交的文件提供了值。
  • 您可能正在使用有错误的 DRF 3.3.0。如果是这种情况,请将 DRF 升级到 3.3.1
猜你喜欢
  • 2021-07-11
  • 2020-02-03
  • 1970-01-01
  • 1970-01-01
  • 2013-11-12
  • 2021-12-14
  • 2011-07-20
  • 1970-01-01
  • 2018-12-04
相关资源
最近更新 更多