【问题标题】:Django rest frame getting values from all tables where the PK is referenced as FKDjango 休息框架从 PK 被引用为 FK 的所有表中获取值
【发布时间】:2023-04-05 23:41:01
【问题描述】:

对于我的父模型 - StudioProfile,其他模型与 StudioProfile 具有外键关系。向我的StudioProfile 序列化程序发出 API 请求时,如何获取所有相关的表数据。下面是我的模型、视图和序列化器,

class StudioProfile(models.Model):
    name = models.CharField(max_length = 120)
    address_1 = models.CharField(max_length = 200)
    address_2 = models.CharField(max_length = 200)

class StudioServices(models.Model):

    studio_profile = models.ForeignKey(StudioProfile, related_name = "services")
    service_name = models.CharField(max_length = 50)

class StudioPicture(models.Model):

    studio_profile  = models.ForeignKey(StudioProfile, related_name = "pic_of_studio")
    picture = models.ImageField(upload_to = 'img_gallery', null = True, blank = True)

序列化器.py

class StudioServicesSerializer(serializers.ModelSerializer):
    class Meta:
        model = StudioServices
        fields = ('studio_profile',   'service_name')

class StudioPicSerializer(serializers.ModelSerializer):
     class Meta:
         model = StudioPicture
         fields = ('picture') 

class StudioProfileSerializer(serializers.ModelSerializer):
    services = StudioServicesSerializer(source = "StudioServices")
    pic_of_studio = StudioPicSerializer(source = "StudioPicture")
    class Meta:
        model = StudioProfile
        fields = ( 'address_1', 'address_2','services','pic_of_studio' )

views.py

class StudioProfile(ListAPIView):
    permission_classes = (ReadWithoutAuthentication,)
    serializer_class = StudioProfileSerializer
    queryset = StudioProfile.objects.select_related().filter(id = 1)

我无法获取数据。我在这里做错了什么?当我向StudioProfile class 发出请求时,我如何才能获得所有相关条目。

追溯:

尝试在序列化程序 StudioProfileSerializer 上获取字段 service_name 的值时出现 AttributeError。 序列化程序字段可能命名不正确,并且与 StudioProfile 实例上的任何属性或键都不匹配。 原始异常文本为:“StudioProfile”对象没有属性“StudioServices”。

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    我认为您可能需要包含 many=true 并将源更改为 StudioProfileSerializer 中的相关名称:

    class StudioProfileSerializer(serializers.ModelSerializer):
        services = StudioServicesSerializer(many = true, source = "services")
        pic_of_studio = StudioPicSerializer(many = true, source = "pic_of_studio")
        class Meta:
            model = StudioProfile
            fields = ( 'address_1', 'address_2','services','pic_of_studio' )
    

    【讨论】:

      猜你喜欢
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 2013-04-08
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多