0

我的models.py后需要的是Django的REST框架HTML表单的POST给错误消息此字段提交

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) 

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

enter image description hereenter image description here

+0

你确定你的'Movie'对象有'Genre'对象吗? –

+0

如何检查。我可以在'django'' admin'部分中创建一个新的'Movie'来选择一个或多个'Genre'对象 – curiousguy

+0

也可以在一个'movie'上休息api调用我可以得到我选择的'Genre'对象。 '[ { “人气”: “1.89”, “导演”: “迪布”, “流派”: “测试1”, “test2的” ], “分数”: “2.80”, “name”:“Test Movie” } ]' – curiousguy

回答

1

您应该使用SlugRelatedField代替StringRelatedField的了点。

+0

我已经尝试过'genre = serializers.SlugRelatedField(many = True,read_only = True,slug_field ='genre')'但是因为即使'Genre'下拉字段没有进入'HTML POST Form' – curiousguy

+1

你的行不能用'read_only = True'设置查询集合而不是 – Linovia

+0

谢谢最终它的工作。 – curiousguy