我正在尝试显示分配了多个ForeignKey字段的表中的数据:
class Promotion (models.Model):
User = models.ForeignKey(User)
Rating = models.ForeignKey(Rating)
Date_Effective = models.DateField()
def __str__(self):
return self.Rating.Rank.Short_Rank + ' ' + self.User.last_name + ' (' + str(self.Date_Effective) + ')'
class Rating (models.Model):
Rank = models.ForeignKey(Rank)
Genre = models.ForeignKey(Genre)
Branch = models.ForeignKey(Branch)
Image = models.FileField(upload_to='ranks')
def __str__(self):
return self.Rank.Display_Rank + " (" + self.Branch.Branch + "; " + self.Genre.Short_Term + ")"
我正在尝试构建一个序列化程序,显示来自它的评级。 str 值和用户信息。
class PromotionSerializer(serializers.HyperlinkedModelSerializer):
Rating = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
users = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
class Meta:
model = Promotion
fields = ('Date_Effective', 'Rating', 'users')
这会导致错误:
Exception Type: TypeError at /member/api/promotions/
Exception Value: 'Rating' object is not iterable
我正在试图解决这个问题。我该怎么做呢? 非常感谢。
答案 0 :(得分:1)
您要求Django Rest Framework使用PromotionSerializer
在PrimaryKeyRelatedField
中返回相关对象的主键。
如果您希望它返回对象的unicode表示,请尝试使用StringRelatedField
代替:http://www.django-rest-framework.org/api-guide/relations/#stringrelatedfield。
此外,正如您的一条评论所提到的,您不应该使用many=True
(不需要将其设置为false,只需删除参数)。
注意:在Python中命名类的属性时使用Title Case是非常规的。标题案例通常保留给类名本身。