DjangoRest中的String相关字段 [英] String Related Field in DjangoRest

查看:565
本文介绍了DjangoRest中的String相关字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经实现了外键使用DRF中的StringRelatedField获取电影类型列表。然而,POST在POST时不起作用。
我得到 StringRelatedField.to_internal_value()必须实现作为错误。
任何人都可以帮我吗?

I have implemented Foreign key to fetch a list of genres for movies using StringRelatedField in DRF. This however does not work while POST. I get StringRelatedField.to_internal_value() must be implemented as error. Can anyone help me?

models.py

models.py

class Movies(models.Model):
    movie_id = models.AutoField(primary_key=True)
    movie_name = models.CharField(max_length =200)
    director = models.CharField(max_length = 100)
    popularity = models.FloatField(max_length = 3)
    imdb_score = models.FloatField(max_length = 10)
    def __unicode__(self):               
        return '%s%s%d%d' % (self.movie_name,self.director,self.popularity,self.imdb_score)

class Genre(models.Model):
    genre_id = models.AutoField(primary_key=True)
    movie_name =models.ForeignKey(Movies, blank=True, null=True, on_delete=models.SET_NULL,related_name='genres')
    genre = models.CharField(max_length =40)

    def __unicode__(self):
        return '%s%s' % (self.genre,self.movie_name)

views.py

    class MovieList(viewsets.ViewSet):
                def list(self,request):
                try:
                    movie_list = Movies.objects.all()
                    serializer = MovieSerializer(movie_list, many=True)
                    username = request.session['username']
                    user_role = request.session['role']
                    context = {'username': username, 'user_role': user_role,     'movie_list': serializer.data}
                    return render(request, 'imdb/movie-list.html', context)
                except KeyError:
                    pass
                    return  HttpResponseRedirect(reverse('imdb:login'))


    class AddMovie(APIView):

        def post(self, request, format='json'):
            data = request.data

            serializer = MovieSerializer(data =request.data)
            #print serializer
            if serializer.is_valid():
                serializer.save()
                return Response(serializer.data, status=status.HTTP_201_CREATED)
            else:
                return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

urls.py

urlpatterns = patterns('',
        url(r'^$', views.login, name='login'),
         url(r'^home/$', views.home, name='home'), 
         url(r'^logout/$', views.logout, name='logout'),
         url(r'^movie-list/$', views.MovieList.as_view({'get':'list'}),name ='movie-list'),
         url(r'^add-movie/$', views.AddMovie.as_view(),name ='add-movie') )

serializer.py

serializer.py

    class MovieSerializer(serializers.ModelSerializer):
        genres = serializers.StringRelatedField(many=True)
        class Meta:
            model = Movies
            fields = ('movie_name','director','popularity','imdb_score','genres')


推荐答案

StringRelatedField是只读的。我不得不使用嵌套的serilaizers。

StringRelatedField is read only. I had to use nested serilaizers.

这篇关于DjangoRest中的String相关字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆