2013-10-04 7 views
7

私はIngredientTypeオブジェクトのM2Mフィールドを保持するレシピモデルを持っています。このフィールド、別名:ingredient_listは、Ingredientオブジェクトを介して、有名な「スルー」モデルを使用して、余分なデータを自分のIngredientTypeに追加します。 これらは私のクラスである:django rest_frameworkを使用してシリアル化する方法スルーモデルManyToManyFields

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() 

私はrest_frameworkを使用してそれらをシリアライズしようとしました:

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') 

が、これを実行しようとしたとき、私ははAttributeErrorを得る: 「IngredientType」オブジェクトには属性がありません'ingredient_type' はっきり

、私は行を変更:

ingredient_list = IngredientSerializer(source='ingredient_list', many=True, read_only = True) 
しかし、私に成分データを取得せずに、それは動作しますが、シリアライザを変更、ある

ingredient_list = IngredientTypeSerializer(source='ingredient_list', many=True, read_only = True) 

:へ

。 このリンクを使用しました: Include intermediary (through model) in responses in Django Rest Framework 参考までに、明らかに私の問題を解決していません。
ご協力いただければ幸いです。 TNX、 あなたRecipeモデルにNitzan

答えて

6

は、ingredient_listフィールドのためにあなたはIngredientTypeManyToManyFieldポインティングを持っています。

RecipeSerializerでは、ingredient_listフィールドはIngredientTypeSerializerではなく、IngredientSerializerを使用しています。

これはエラーです。 (エラーメッセージについては、sourceの実際のモデルにはシリアライザが検索する属性がありません)

これを超えると、名前付けスキームが大変混乱します。 「レシピ」は問題ありませんが、「IngredientType」と呼んでいるのはおそらく「成分」だけで、次にスルーテーブルの別名を見つけるべきです。 (たぶん "レシピエントリー詳細")

私は助けてくれることを願っています。

関連する問題