2016-09-21 2 views
0

Ich bin ein Anfänger auf die Django Rest Frame Arbeit. Ich habe ein Problem von einer langen Periode ich versuche, eine Lösung durch viele Foren zu finden, aber leider ist es mir nicht gelungen. hoffen, dass Sie ich michDjango Ruhe Rahmen eins zu eins Beziehung Update Serializer

models.py

from __future__ import unicode_literals 
from django.contrib.auth.models import User 

from django.db import models 

class Account(models.Model): 
    my_user=models.OneToOneField(User,on_delete=models.CASCADE) 
    statut=models.CharField(max_length=80) 
    date=models.DateField(auto_now=True,auto_now_add=False) 

    def __unicode__(self): 

     return self.my_user.first_name 

Jetzt aktualisieren möchten Konto serilizer helfen. Serializer .py

class AccountUpdateSerializer(serializers.ModelSerializer): 


    username=serializers.CharField(source ='my_user.username') 

    class Meta: 

     model= Account 
     fields=['id','username','statut','date'] 
     def update(self, instance, validated_data): 
      print(instance) 
      instance.statut = validated_data.get('statut', instance.statut) 
      instance.my_user.username=validated_data['username'] 
      return instance 

zurückzuverfolgen: Umwelt:

Request Method: PUT 
Request URL: http://127.0.0.1:9000/api/account/edit/1/ 

Django Version: 1.9 
Python Version: 2.7.6 
Installed Applications: 
['django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'rest_framework', 
'project', 
'sponsors', 
'contacts', 
'medias', 
'conferencier', 
'competition', 
'poste', 
'account'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 



Traceback: 

File "/home/asus/Documents/Gsource/gsource/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    149.      response = self.process_exception_by_middleware(e, request) 

File "/home/asus/Documents/Gsource/gsource/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    147.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "/home/asus/Documents/Gsource/gsource/local/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view 
    58.   return view_func(*args, **kwargs) 

File "/home/asus/Documents/Gsource/gsource/local/lib/python2.7/site-packages/django/views/generic/base.py" in view 
    68.    return self.dispatch(request, *args, **kwargs) 

File "/home/asus/Documents/Gsource/gsource/local/lib/python2.7/site-packages/rest_framework/views.py" in dispatch 
    474.    response = self.handle_exception(exc) 

File "/home/asus/Documents/Gsource/gsource/local/lib/python2.7/site-packages/rest_framework/views.py" in handle_exception 
    434.    self.raise_uncaught_exception(exc) 

File "/home/asus/Documents/Gsource/gsource/local/lib/python2.7/site-packages/rest_framework/views.py" in dispatch 
    471.    response = handler(request, *args, **kwargs) 

File "/home/asus/Documents/Gsource/gsource/local/lib/python2.7/site-packages/rest_framework/generics.py" in put 
    256.   return self.update(request, *args, **kwargs) 

File "/home/asus/Documents/Gsource/gsource/local/lib/python2.7/site-packages/rest_framework/mixins.py" in update 
    70.   self.perform_update(serializer) 

File "/home/asus/Documents/Gsource/gsource/local/lib/python2.7/site-packages/rest_framework/mixins.py" in perform_update 
    74.   serializer.save() 

File "/home/asus/Documents/Gsource/gsource/local/lib/python2.7/site-packages/rest_framework/serializers.py" in save 
    187.    self.instance = self.update(self.instance, validated_data) 

File "/home/asus/Documents/Gsource/gsource/local/lib/python2.7/site-packages/rest_framework/serializers.py" in update 
    907.    setattr(instance, attr, value) 

File "/home/asus/Documents/Gsource/gsource/local/lib/python2.7/site-packages/django/db/models/fields/related_descriptors.py" in __set__ 
    207.      self.field.remote_field.model._meta.object_name, 

Exception Type: ValueError at /api/account/edit/1/ 
Exception Value: Cannot assign "{u'username': u'kais'}": "Account.my_user" must be a "User" instance. 
+0

Ihr Modell hat my_user und Ihre Serializer hat my_username. Welches ist es? – e4c5

+0

Ich meine my_user.username nicht my_username ich korrigiere es aber das gleiche Problem – asus1902

+0

Bearbeiten Sie Ihre Frage und den genauen Code, so dass die Leute nicht raten müssen – e4c5

Antwort

2

Ihre update Methode wird nicht aufgerufen, da es sich um ein Verfahren der Meta-Klasse der Serializer (AccountUpdateSerializer.Meta), nicht die Serializer Klasse AccountUpdateSerializer selbst.

Hier ist, wie es aussehen sollte:

class AccountUpdateSerializer(serializers.ModelSerializer): 

    username=serializers.CharField(source ='my_user.username') 

    class Meta: 

     model= Account 
     fields=['id','username','statut','date'] 

    def update(self, instance, validated_data): 
     print(instance) 
     instance.statut = validated_data.get('statut', instance.statut) 
     instance.my_user.username = validated_data['username'] 
     return instance 

(Oder haben Sie gerade Ihren Code nicht richtig schreiben?)

+0

vielen Dank es funktioniert jetzt – asus1902

Verwandte Themen