【问题标题】:django rest framework get data from foreign key relationdjango rest框架从外键关系中获取数据
【发布时间】:2015-12-07 05:01:04
【问题描述】:

我使用 Django auth 用户创建了一个用户配置文件,因此我想使用 UserProfile 模型序列化程序获取用户名、电子邮件和电话,因此可以使用 Django rest 框架中的 ModelSerializer 从外键关系中获取数据。我没有从文档和谷歌得到任何有用的解决方案,请帮忙。

class UserProfile(models.Model):
    user = models.ForeignKey(User,)
    phone = models.CharField(max_length=15, blank=True)

class UserProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model=UserProfile
        fields = (phone,'user__username','user__email')

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    您需要在序列化程序中定义usernameemail 字段,并使用点分符号传递source 参数以遍历User 模型中的属性。

    您需要执行以下操作:

    class UserProfileSerializer(serializers.ModelSerializer):
        username = serializers.CharField(source='user.username', read_only=True)
        email = serializers.EmailField(source='user.email', read_only=True)
    
        class Meta:
            model=UserProfile
            fields = (phone, username, email)
    

    【讨论】:

      【解决方案2】:

      如果您使用的是休息 - 我建议您序列化用户模型 像这样的

      class UserSerializer(serializers.ModelSerializer):
          phone = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
      
          class Meta:
              model = User
              fields = ('username', 'email', 'phone')
      

      如果你也想实现相反的效果:

      class UserProfileserializer(serializers.ModelSerializer):
          username = serializers.RelatedField(source='user', read_only=True)
          email = serializers.RelatedField(source='user', read_only=True)
      
          class Meta:
             model = UserProfile
             fields = ('username','email','phone')
      

      【讨论】:

      • 感谢重播,但我想使用 UserProfile 序列化程序获取用户名、电子邮件和电话,而不是来自用户用户序列化程序,因此有可能。
      • 它抛出错误:必须为字段电子邮件实现RelatedField.to_representation()
      【解决方案3】:

      试试这个:

      # import your serializer class
      from myapp.serializers import UserProfileSerializer
      
      class UserSerializer(serializers.ModelSerializer):
          phone = UserProfileSerializer(many=True, read_only=True)
      
          class Meta:
              model = User
              fields = ('username', 'email', 'phone')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-23
        • 2017-08-19
        • 2018-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多