2012-05-17 26 views
7

"aracılığıyla" olanlar burada bulunabilir gibi düzgün, ilişkiler "ile" Birçok Çok başa anlamaya: https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationshipsdjango-tastypie ve pek çok Django ve Tastypie ben çalışılıyor birlikteliklerin

İşte Örneğim modeller:

class Ingredient(models.Model): 
    name = models.CharField(max_length=100) 
    description = models.TextField() 

class RecipeIngredients(models.Model): 
    recipe = models.ForeignKey('Recipe') 
    ingredient = models.ForeignKey('Ingredient') 
    weight = models.IntegerField(null = True, blank = True) 

class Recipe(models.Model): 
    title = models.CharField(max_length=100) 
    ingredients = models.ManyToManyField(Ingredient, related_name='ingredients', through='RecipeIngredients', null = True, blank = True) 

Şimdi benim api.py dosyası: Bu örnekte benim kod dayandırmak çalışıyorum

class IngredientResource(ModelResource): 
    ingredients = fields.ToOneField('RecipeResource', 'ingredients', full=True) 

    class Meta: 
     queryset = Ingredient.objects.all() 
     resource_name = "ingredients" 


class RecipeIngredientResource(ModelResource): 
    ingredient = fields.ToOneField(IngredientResource, 'ingredients', full=True) 
    recipe = fields.ToOneField('RecipeResource', 'recipe', full=True) 

    class Meta: 
     queryset= RecipeIngredients.objects.all() 


class RecipeResource(ModelResource): 
    ingredients = fields.ToManyField(RecipeIngredientResource, 'ingredients', full=True) 

class Meta: 
    queryset = Recipe.objects.all() 
    resource_name = 'recipe' 

: http://pastebin.com/L7U5rKn9

Maalesef bu kodla bu hatayı alıyorum:

"error_message": "'Ingredient' object has no attribute 'recipe'" 

kimse burada ne olduğunu biliyor mu? Ya da içeriğin adını RecipeIngredientResource içine nasıl ekleyebilirim? Teşekkürler!

DÜZENLEME: hatayı kendim bulmuş olabilir

. ToManyField, RecipeIngredient'e değil, Malzemeye yönlendirilmelidir. Bu işin yapılıp yapılmadığını göreceğim.

DÜZENLEME:

Yeni hatası .. herhangi bir fikir? Nesnenin '' boş bir özniteliği 'başlığı' var ve varsayılan veya boş değere izin vermiyor.

cevap

3

Sen sözü:

I may have found the error myself. ToManyField should be directed toward Ingredient and not RecipeIngredient. I'll see if this does the job.

var [Tastypie M2M] (http://blog.eugene-yeo.in/django-tastypie-manytomany-through.html) (eski blog çevrimdışı: https://github.com/9gix/eugene-yeo.in/blob/master/content/web/django-tastiepie-m2m.rst) gerçi daha iyi bir yaklaşım olduğunu Malzemeler için yerine ToManyField arasında kısa Özetle

, 'a doğru ToManyField kullanıyorum. Ve ThroughModel Queryset'i döndüren bir geri arama işlevi olması için attribute kwargs'ı özelleştirin. Bu cevap uzun zaman önce yapılmış

Güncelleme (2014 Nisan). Hala kullanışlı olup olmadığından emin değil.

+1

Lütfen bu yazının cevabının önemli noktalarını buraya ekleyin. Yığın Taşması, şeylerin bağlantılarının bir deposu olmak için değil, cevapların bir deposu olmak için burada değildir. Bu ayrıca blogunuzu tanıtmanın çok uygunsuz bir yoludur. –

+0

Duh, Tamam, .. Cevabını buraya kopyalayacağım ... Gönderi çok uzun olduğu için ... – Yeo

+2

Bağlantı şu anda ölü gibi görünüyor – msc

-2

Sizinle aynı sorunu yaşadım. Bunu çözmek için, sadece ToMany alanını (RecipeResource'da olduğu gibi) API'den kaldırdım. Bu bizim için çalıştı çünkü model hala birçok alan vardı (API değil) ve hala aradaki modeli sorgulayarak ilişkiyi sorgulayabilirsiniz.

+0

Bu soruya gerçekten cevap vermiyor. – fluffels

İlgili konular