2013-07-29 28 views
5

İ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

cevap

2

Sana user_id yerine kullanmak gerektiğini düşünüyorum, user adlandırılan bir alan vardır sizin özel User modeliniz? Varsayılan olarak bir User modelinin zaten id adlı bir alanı vardır ve bu PK'dir.

+0

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