nit*_*nwe 7 python django django-models django-rest-framework
我有一个Recipe模型,它包含一个IngredientType对象的M2M字段.这个字段,也就是ingredient_list,通过一个Ingredient对象使用臭名昭着的"通过"模型,该对象将额外的数据添加到我的IngredientType中.这些是我的课程:
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()
Run Code Online (Sandbox Code Playgroud)
我尝试使用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')
Run Code Online (Sandbox Code Playgroud)
但是在尝试运行时,我得到一个AttributeError:'IngredientType'对象没有属性'ingredient_type'
显然,当我改变这条线时:
ingredient_list = IngredientSerializer(source='ingredient_list', many=True, read_only = True)
Run Code Online (Sandbox Code Playgroud)
至:
ingredient_list = IngredientTypeSerializer(source='ingredient_list', many=True, read_only = True)
Run Code Online (Sandbox Code Playgroud)
也就是说,更改串行器,它可以工作,但没有取给我的成分数据.我使用过这个链接:
在Django Rest Framework的响应中包含中介(通过模型)
作为参考,但显然它没有解决我的问题.
任何帮助,将不胜感激.tnx,Nitzan
在您的Recipe模型上,ingredient_list您可以ManyToManyField指向该字段IngredientType.
在你RecipeSerializer的ingredient_list领域不是使用IngredientTypeSerializer而是使用IngredientSerializer.
这是错误.(它解释了错误消息 - source序列化程序没有查找属性的实际模型.)
除此之外,您的命名方案非常混乱."食谱"很好,但你所谓的"IngredientType"应该只是"成分",然后你应该找到通过表的不同名称.(也许是"RecipeIngredientDetails")
我希望有所帮助.
| 归档时间: |
|
| 查看次数: |
2545 次 |
| 最近记录: |