String Verwandte Feld in DjangoRest

Ich habe Fremdschlüssel implementiert, um eine Liste von Genres für Filme mit StringRelatedField in DRF zu holen. Dies funktioniert jedoch nicht, während POST. Ich bekomme StringRelatedField.to_internal_value () muss als Fehler implementiert werden. Kann mir jemand helfen?

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

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

3 Solutions collect form web for “String Verwandte Feld in DjangoRest”

StringRelatedField ist nur lesbar. Ich musste verschachtelte Serilisatoren benutzen.

 class GenreSerializer(serializers.ModelSerializer): class Meta: model = Genre fields =('genre',) class MovieSerializerList(serializers.ModelSerializer): genres = GenreSerializer(many=True) class Meta: model = Movies fields = ('movie_name','director','popularity','imdb_score','genres') 
 class WordListingField(serializers.StringRelatedField): def to_internal_value(self, value): return value 

Ein anderer Weg ist, to_internal_value() zu implementieren. Allerdings stimme ich der Meinung des Autors zu. Ich habe das nur wegen der Existenz einer technischen Schulden in unserem Projekt widerwillig umgesetzt.

  • Parsing von Python-HTML-POST-Daten aus BaseHTTPServer
  • Warum enthält pypi-Upload \ r \ n in POST-Anforderungsdaten?
  • Python-Standardbibliothek zu POST-Multipart- / Form-Daten-codierten Daten
  • HTTP-POST-Anforderung erstellen
  • Es ist nicht möglich, den Inhaltstyp auf application / json mit urllib2 zu setzen
  • Github-api gibt 404 bei der Übergabe von json-data mit python + urllib2
  • Python urllib2 Datei Upload Probleme
  • Python MultiPart POST Malformed
  • Keine Ergebnisse von load2neo bulk load -curl POSTcomand
  • Python-Anfragen 'POST-Datei schlägt fehl, wenn man versucht, ein WordPress Theme zum Host hochzuladen
  • Wie gehe ich mit jQuery / Ajax in Django?
  • Python ist die beste Programmiersprache der Welt.