2016-11-17 4 views
0

Ich kann mein Objekt im verschachtelten Objektfeld nicht aktualisieren. Hier kann ich name von Movie-Modell nicht aktualisieren. Hier ist meine model.py:Verschachteltes Feld aktualisieren

class Movie(models.Model): 
    name = models.CharField(max_length=800, unique=True) 
    imdb_rating = models.IntegerField(null=True) 
    movie_choice = (
     ('Act', 'Action'), 
     ........... 
    ) 
    movie_type = models.CharField(max_length=3, choices=movie_choice) 
    created_at = models.DateTimeField(auto_now_add=True) 
    updated_at = models.DateTimeField(auto_now=True) 


class Hiren(models.Model): 
    movie = models.ForeignKey(Movie) 
    watched_full = models.BooleanField(default=True) 
    rating = models.IntegerField() 
    source = models.CharField(max_length=500, null=True) 
    watched_at = models.DateField() 
    quality_choice = (
    .................. 
    ) 
    video_quality = models.CharField(max_length=3, choices=quality_choice) 
    created_at = models.DateField(auto_now_add=True) 
    updated_at = models.DateField(auto_now=True) 

und serializer.py

class MovieSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Movie 
     fields = '__all__' 


class HirenSerializer(serializers.ModelSerializer): 
    movie = MovieSerializer() 

    class Meta: 
     model = Hiren 
     fields = ('movie', 'id', 'watched_full', 'rating', 'source', 'video_quality', 'watched_at') 


    def update(self, instance, validated_data): 
     instance.movie.name = validated_data.get('movie.name', instance.movie.name) 
     instance.watched_full = validated_data.get('watched_full', instance.watched_full) 
     instance.rating = validated_data.get('rating', instance.rating) 
     instance.source = validated_data.get('source', instance.source) 
     instance.video_quality = validated_data.get('video_quality', instance.video_quality) 
     instance.watched_at = validated_data.get('watched_at', instance.watched_at) 
     instance.save() 

     return instance 

Antwort

1

Sie nicht save zu verwandten Objekt aufrufen hat

def update(self, instance, validated_data): 
    instance.movie.name = validated_data.get('movie', {}).get('name') or instance.movie.name 
    instance.watched_full = validated_data.get('watched_full', instance.watched_full) 
    instance.rating = validated_data.get('rating', instance.rating) 
    instance.source = validated_data.get('source', instance.source) 
    instance.video_quality = validated_data.get('video_quality', instance.video_quality) 
    instance.watched_at = validated_data.get('watched_at', instance.watched_at) 
    # here 
    instance.movie.save() 
    instance.save() 

    return instance 
+0

noch gleiche Problem – pyprism

+0

@pyprism drucken Ich habe ' valided_data.get ('movie.name', instance.movie.name) 'und sehen Sie, ob Sie tatsächlich die richtigen Daten erhalten. Vielleicht setzen Sie einfach den Standardwert –

+0

Das ist richtig, wie bekomme ich den richtigen Wert? – pyprism

Verwandte Themen