首页 > 解决方案 > 使用 Django Rest Framework 显示来自相关模型的数据

问题描述

我正在尝试学习 DRF,为了我的自我练习,想创建一个像 API 一样的成员,其中包含三个模型。

每当我请求 UserInfo 时,我都想加入联系数据;然而,我用谷歌搜索,stackoverflow 很多天都没有任何指示。如果任何大师能指导我完成这个,那就太好了。python:3.7 django:2.2.6 drf:3.10.3

# models.py
class UserInfo(models.Model):
    CID = models.AutoField(primary_key=True)
    USER_ID = models.CharField(max_length=50, null=False)
    LOGIN_ID = models.CharField(max_length=50, null=True)
    USER_TYPE = models.CharField(max_length=10, null=False)
    UPDATE_TIME = models.DateTimeField(auto_now=True)

    def __str__(self):
        names = self.FIRST_NAME + " " + self.LAST_NAME
        return names

    class Meta:
        db_table = "myCustomers"

class ContactTypes(models.Model):
    CID = models.AutoField(primary_key=True)
    CONTACT_TYPE = models.CharField(max_length=10, null=False)

    def __str__(self):
        return self.CONTACT_TYPE

class Contact(models.Model):
    CID = models.AutoField(primary_key=True)
    USER_ID = models.ForeignKey(UserInfo, on_delete=models.CASCADE)
    CONTACT_TYPE = models.ForeignKey(ContactTypes, on_delete=models.CASCADE)
    CONTACT_INFO = models.CharField(max_length=50, null=False)
    UPDATE_TIME = models.DateTimeField(auto_now=True)
# serializers.py
class ContactSerializer(serializers.ModelSerializer):
    class Meta:
        model = Contact
        fields = '__all__'

class ContactTypeSerializer(serializers.ModelSerializer):
    class Meta:
        model = ContactTypes
        fields = '__all__'

class UserInfoSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserInfo
        fields = '__all__'
# views.py
class myCustomersViewSet(viewsets.ModelViewSet):
    queryset = UserInfo.objects.all()
    serializer_class = UserInfoSerializer

class contactsViewSet(viewsets.ModelViewSet):
    queryset = Contact.objects.all()
    serializer_class = ContactSerializer

class contactTypesViewSet(viewsets.ModelViewSet):
    queryset = ContactTypes.objects.all()
    serializer_class = ContactTypeSerializer

谢谢你花时间陪我

标签: djangopython-3.xdjango-rest-framework

解决方案


class ContactSerializer(serializers.ModelSerializer):
  CONTACT_TYPE = serializers.PrimaryKeyRelatedField(queryset = ContactTypes.objects.all())
    class Meta:
        model = Contact
        fields = [............,
                 CONTACT_TYPE,
]

通过这种方式,您可以将外键与序列化程序类中的其他模型相关联。尝试在您的建模字段名称中使用小写字母,这是惯例。


推荐阅读