2012-09-15 17 views
6

TastyPie'de birden fazla Kaynak nasıl birleştirebilirim? Birleştirmeyi istediğim 3 modelim var: kullanıcılar, profiller ve mesajlar.Related Resources With LezzetliPie

İdeal olarak kullanıcı içinde iç içe geçmiş profilleri severim. Hem kullanıcı hem de tüm kullanıcı konumunu UserPostResource'dan göstermek istiyorum. Buradan nereye gideceğime emin değilim. buna karşılık düzenli django iç içe arama sözdizimi kabul attribute kwarg, geçen izin

class UserProfile(models.Model): 

    user = models.OneToOneField(User) 

    website = models.CharField(max_length=50) 
    description = models.CharField(max_length=255) 
    full_name = models.CharField(max_length=50) 


class UserPost(models.Model): 
    user = models.ForeignKey(User) 

    datetime = models.DateTimeField(auto_now_add=True) 
    text = models.CharField(max_length=255, blank=True) 
    location = models.CharField(max_length=255, blank= True) 

cevap

10

Tastypie alanlar (kaynağın ModelResource olan): Burada

class UserResource(ModelResource): 

    class Meta: 
     queryset = User.objects.all() 
     resource_name = 'user' 
     fields = ['username','id','date_joined'] 

     #Improper Auth 
     authorization = Authorization() 

class UserProfileResource(ModelResource): 

    class Meta: 
     queryset = UserProfile.objects.all() 
     resource_name = 'profile' 


class UserPostResource(ModelResource): 
    user = fields.ForeignKey(UserResource,'user', full=True) 


    class Meta: 
     queryset = UserPost.objects.all() 
     resource_name = 'userpost' 

     #Improper Auth 
     authorization = Authorization() 

benim modellerdir.

Yani, tüm bu ilk yararlı olabilir: Aşağıdaki

# in UserProfile model (adding related_name) 
user = models.OneToOneField(User, related_name="profile") 

ve üzeri değişim göz önüne alındığında,:

from tastypie import fields 

class UserResource(ModelResource): 
    # ... 
    website = fields.CharField(attribute = 'profile__website') 
    description = fields.CharField(attribute = 'profile__description') 
    full_name = fields.CharField(attribute = 'profile__full_name') 
    # ... 

UserResource içinde UserProfile modelinden veri gösterecektir.

UserResource içinde bulunan konumların bir listesini (UserPost'dan geliyor) görüntülemek istiyorsanız, Tastypie yöntemlerinden birini geçersiz kılmanız gerekecektir. Belgelere göre iyi bir aday dehydrate() metodu olacaktır. Böyle

şey çalışmalıdır:

# in UserPost model (adding related_name) 
user = models.ForeignKey(User, related_name="posts") 

class UserResource(ModelResource): 
    # .... 
    def dehydrate(self, bundle): 
     posts = bundle.obj.posts.all() 
     bundle.data['locations'] = [post.location for post in posts] 
     return bundle 
    # ... 
+0

UserProfile Kullanıcı ilgilidir ve UserPost Kullanıcı ilişkilidir, bu durumda bir örnek verebilir? – arooo

+1

Modellerinizi yapıştırabilir ve hangi modelin hangi özniteliklerini 'UserResource' üzerinden gösterilmesini istediğinizi söylerseniz evet. – kgr

+0

Sorumu ben – arooo