İki serileştirici arasında iç içe ilişki oluşturmaya çalıştığımda AttributeError alıyorum. Garip olan şey, başka bir API ile aynı şeyi yapıyorum, ancak bu sefer işe yaramaz.İç içe ilişkiler kullanıldığında AttributeError
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')
Ve ilişkili modeller: İşte kod
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'
hatası:
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
herkes bu hata ile bana yardımcı olabilir? Normal bir birincil anahtar ilişkisi işe yarıyor, ama ben kesinlikle yuvalanmış bir ilişki almak istiyorum.
id = models.IntegerField(primary_key=True)
yılında:
class NotificationSerializer(serializers.ModelSerializer):
user = UserSerializer()
class Meta:
model = Notification
fields = ('id', 'user', 'type', 'parent_id', 'created', 'modified', 'seen')
Başka küçük not gerçekten oluşturmak istiyorsunuz şudur: Notification
modeline yana
Teşekkürler! Bu hile oldu. Neden özel kimlik? Standart olan, otomatik artımlı bir alan oluşturduğundan ve otomatik artımlı bir kimlik istemiyorum. Kullanıcı kimliğini manuel olarak ayarlıyorum (başka bir harici profil tablosundan). Bu yüzden ;) – Leander