我正在使用Angular 8和Django3。我想为Restaurant
创建一个页面,该页面显示Recipes
拥有的所有Restaurant
。我有一个Restaurant
模型和一个具有Recipe
关系的ForeignKey
模型,如下所示:
编辑:models.py
class Restaurant(models.Model):
name = models.CharField(max_length=100)
class Recipe(models.Model):
name = models.CharField(max_length=30)
restaurant = models.ForeignKey(Restaurant, related_name='recipe', on_delete=models.CASCADE)
def __str__(self):
return self.name
我正在使用Restaurant
序列化PrimaryKeyRelatedField
的数据:
serializers.py
class RestaurantDetail(serializers.ModelSerializer):
recipe = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
class Meta:
model = Restaurant
fields = ('id', 'name', 'food', 'recipe')
[当我在Postman中输入url(http://127.0.0.1:8000/restaurants/restaurantdetail/2
)时,我得到了正确的响应数据,因为它为我提供了Restaurant
的名称以及与之相关的Recipe
pk
值的数组Restaurant
。因此,我正确地进行了序列化。
{
"id": 2,
"name": "sec",
"recipe": [
3,
4
]
}
但是,我想做的是,在我的Angular html
文件中,可以访问数组中每个Recipe
的名称。当我遍历数组时,我只能访问的是pk
值。有没有一种简单的方法可以执行此操作,或者我需要创建另一个Angular组件,该组件会查找并为每个Recipe
值返回一个新的pk
对象。
换句话说,我猜串行器不是返回Recipe
对象,而只是返回其pk
值?
向模型添加str函数
class Restaurant(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Recipe(models.Model):
name = models.CharField(max_length=30)
restaurant = models.ForeignKey(Restaurant, related_name='recipe', on_delete=models.CASCADE)
def __str__(self):
return self.restaurant.name
我通过使用嵌套序列化解决了这个问题。这是指向文档Nested Serialization
的良好链接serializers.py
class RecipeShort(serializers.ModelSerializer):
class Meta:
model = Recipe
fields = ('id','name')
class RestaurantDetail(serializers.ModelSerializer):
recipe = RecipeShort(many=True, read_only=True)
class Meta:
model = Restaurant
fields = ('id', 'name', 'food', 'recipe')