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.

  • Python: Senden und Empfangen großer Dateien über POST mit cherrypy
  • Senden Sie die Datei mit dem POST aus einem Python-Skript
  • Wie kann ich binäre Postdaten über HTTP senden?
  • Wie gehe ich mit jQuery / Ajax in Django?
  • Python-Anfragen 'POST-Datei schlägt fehl, wenn man versucht, ein WordPress Theme zum Host hochzuladen
  • Wie gebe ich rohe POST-Daten in urllib3?
  • Verwenden von Daten von Ajax in einem Python-Skript
  • Senden von POST-Parametern mit Python mit Mechanize
  • Python-POST-Binärdaten
  • Django ajax Bild hochladen
  • Session in webpy - Benutzernamen in allen Klassen
  • Python ist die beste Programmiersprache der Welt.