Ich erhalte einen AttributeError, wenn ich versuche, eine verschachtelte Beziehung zwischen zwei Serialisern zu erstellen. Das Seltsame ist, dass ich genau das Gleiche mache wie mit einer anderen API, aber dieses Mal funktioniert es nicht. Hier ist der Code:AttributeError bei Verwendung verschachtelter Relationen
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = get_user_model()
fields = ('id', 'last_login','username', 'created')
class NotificationSerializer(serializers.ModelSerializer):
user_id = UserSerializer()
class Meta:
model = Notification
fields = ('id', 'user_id', 'type', 'parent_id', 'created', 'modified', 'seen')
und die dazugehörigen Modelle:
class Notification(models.Model):
user = models.ForeignKey(User)
type = models.CharField(max_length=255)
parent_id = models.IntegerField()
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
seen = models.SmallIntegerField(default=0)
def __unicode__(self):
return self.type
class Meta:
db_table = 'notification'
class User(AbstractBaseUser, PermissionsMixin):
username = models.CharField(max_length=255, unique=True)
id = models.IntegerField(primary_key=True)
created = models.DateTimeField(auto_now=True)
tag = models.ManyToManyField(Tag)
USERNAME_FIELD = 'username'
objects = MyUserManager()
class Meta:
db_table = 'user'
Der Fehler:
Exception Type: AttributeError
Exception Value:
'long' object has no attribute 'id'
Exception Location: /lib/python2.7/site-packages/rest_framework/fields.py in get_component, line 55
mir jemand kann mit diesem Fehler helfen? Eine normale Primärschlüssel-Beziehung funktioniert, aber ich möchte definitiv eine verschachtelte Beziehung bekommen.
Danke! Das war der Trick. Warum eine benutzerdefinierte ID? Weil der Standard ein automatisch inkrementelles Feld erzeugt und ich keine automatische inkrementelle ID möchte. Ich habe die Benutzer-ID manuell festgelegt (aus einer anderen externen Tabelle). Deshalb ;) – Leander