django - 使用 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
谢谢你花时间陪我
解决方案
class ContactSerializer(serializers.ModelSerializer):
CONTACT_TYPE = serializers.PrimaryKeyRelatedField(queryset = ContactTypes.objects.all())
class Meta:
model = Contact
fields = [............,
CONTACT_TYPE,
]
通过这种方式,您可以将外键与序列化程序类中的其他模型相关联。尝试在您的建模字段名称中使用小写字母,这是惯例。
推荐阅读
- python - 虚拟环境的特定 jupyter notebook 配置文件
- mysql - 包含范围时,MySQL相关子查询非常慢
- python - 如何在 PyQt5 应用程序中显示来自 moviepy 的 write_audiofile 的转换进度?
- javascript - React-native-google-places-autocomplete:将动态字符串变量传递给查询
- swift - SwiftUI:当 JSON 文件从后端接收到新条目时,如何发送推送通知?
- outlook - 如何在 Outlook 的 VSTO 插件中获取 Outlook 的 Web 插件 ItemId?
- f# - 有没有办法连接两个 IActorRef 数组?
- python - pynput.keyboard 怎么能用到 f20?
- mongodb - Mongodb收集对象总小时收集
- python - 如何配置 Flask Mail 以使用 Postfix