如何在DJANGO DRF中显示连接表中的数据

时间:2017-03-20 01:54:17

标签: django

我正在尝试显示分配了多个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

我正在试图解决这个问题。我该怎么做呢? 非常感谢。

1 个答案:

答案 0 :(得分:1)

您要求Django Rest Framework使用PromotionSerializerPrimaryKeyRelatedField中返回相关对象的主键。

如果您希望它返回对象的unicode表示,请尝试使用StringRelatedField代替:http://www.django-rest-framework.org/api-guide/relations/#stringrelatedfield

此外,正如您的一条评论所提到的,您不应该使用many=True(不需要将其设置为false,只需删除参数)。

注意:在Python中命名类的属性时使用Title Case是非常规的。标题案例通常保留给类名本身。