2013-10-04 5 views
7

Bir IngredientType nesnesinin M2M alanını tutan bir Recipe modelim var. Bu içerik, partneri_listesi, IngredientType ürününe fazladan veri ekleyen bir Ingredient nesnesi aracılığıyla kötü şöhretli 'through' modelini kullanır.django rest_framework bir Through Model ile bir ManyToManyFields kullanarak serileştirmek için

class Recipe(models.Model): 
    user_profile = models.ForeignKey(UserProfile, null=True, blank = True) 
    name = models.CharField(max_length=200) 
    photo1 = models.ImageField(upload_to = 'images/recipies', help_text="This photo will show by default") 
    ingredient_list = models.ManyToManyField(IngredientType,through='Ingredient') 

class Ingredient(models.Model): 
    ingredient_type = models.ForeignKey(IngredientType) 
    recipe = models.ForeignKey(Recipe) 
    amount = models.IntegerField() 
    units = models.CharField(max_length=4,choices=UNIT, 
           default=None, null=True, blank = True) 

class IngredientType(models.Model): 
    name = models.CharField(max_length=200) 
    plural_name = models.CharField(max_length=200) 
    photo = models.ImageField(upload_to = 'images/ingredients') 
    is_main = models.BooleanField() 

i rest_framework kullanarak bunları seri denedim:

class IngredientTypeSerializer(serializers.HyperlinkedModelSerializer): 
    class Meta: 
     model = IngredientType 
     fields=('name', 'plural_name', 'photo', 'is_main') 

class IngredientSerializer(serializers.HyperlinkedModelSerializer): 
    ingredient_type = IngredientTypeSerializer(source = 'ingredient_type') 
    amount = serializers.Field(source='ingredient_type.amount') 
    units = serializers.Field(source='ingredient_type.units') 
    recipe = serializers.Field(source='Recipe.name') 
class Meta: 
    model = Ingredient 
    fields=('amount', 'units') 

class RecipeSerializer(serializers.ModelSerializer): 
    ingredient_list = IngredientSerializer(source='ingredient_list', many=True, read_only = True) 
    class Meta: 
     model = Recipe 
     fields = ('user_profile', 'name','photo1','ingredient_list') 

ama bu çalıştırmak çalışırken, ben bir AttributeError olsun: 'IngredientType' nesne hiçbir özelliği vardır bunlar benim sınıfları vardır 'ingredient_type' çizgiyi değiştirmek açıkça

:

ingredient_list = IngredientSerializer(source='ingredient_list', many=True, read_only = True) 
için

:

olduğunu
ingredient_list = IngredientTypeSerializer(source='ingredient_list', many=True, read_only = True) 

, çalışıyor, Serializer değişebilir ama Bileşen veri beni getirilirken olmadan. Bu bağlantıyı kullandım: Include intermediary (through model) in responses in Django Rest Framework referans olarak, ancak açıkçası benim sorunumu çözmedi.
Herhangi bir yardım için teşekkür ederiz. tnx, Nitzan sizin Recipe modelde

cevap

6

, ingredient_list alan için size IngredientType bir ManyToManyField işaret var.

RecipeSerializer alanınızda ingredient_list alanı IngredientTypeSerializer alanını değil, IngredientSerializer numaralı telefonu kullanıyor.

Bu bir hatadır. (Ve hata mesajını açıklar - source'daki gerçek model, serileştirici tarafından aranan özniteliğe sahip değildir.)

Bunun ötesinde, adlandırma düzeniniz çok kafa karıştırıcıdır. "Reçete" gayet iyi, ama "IngredientType" dediğiniz şey muhtemelen sadece "Hammadde" olmalı ve sonra tablo için ayrı bir isim bulmalısınız. (Belki "RecipeIngredientDetails")

Umarım yardımcı olur.

İlgili konular