【发布时间】: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对象吗? -
如何检查。在
djangoadmin部分中创建新的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