Django Rest Framework嵌套关系 [英] Django Rest Framework nested relationship
本文介绍了Django Rest Framework嵌套关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我是使用Django的新手,我需要您的帮助
I'm new in using Django, I need your help
因此,我创建了这样的模型
So, I created a model like this
models.py
from django.db import models
# Create your models here.
class Pegawai(models.Model):
name = models.CharField(max_length=60)
alias = models.CharField(max_length=60)
def __str__(self):
return self.name
class Barang(models.Model):
pegawai = models.ForeignKey(Pegawai,on_delete=models.CASCADE,related_name='barangs',)
nama_barang = models.CharField(max_length=60)
harga_barang = models.CharField(max_length=60)
def __str__(self):
return self.pegawai.name
我的序列化器:
serializers.py
from rest_framework import serializers, fields
from .models import Pegawai,Barang
class BarangSerializer(serializers.ModelSerializer):
class Meta:
model = Barang
fields = (
'pegawai',
'nama_barang',
'harga_barang',
)
class PegawaiSerializer(serializers.ModelSerializer):
barangs = BarangSerializer(read_only=True, many=True)
class Meta:
model = Pegawai
fields = (
'id',
'name',
'alias',
'barangs',
)
我的观点:
views.py
from rest_framework import viewsets
from .serializers import PegawaiSerializer,BarangSerializer
from .models import Pegawai,Barang
class BarangViewSet(viewsets.ModelViewSet):
queryset = Barang.objects.all().order_by('nama_barang')
serializer_class = BarangSerializer
class PegawaiViewSet(viewsets.ModelViewSet):
queryset = Pegawai.objects.all().order_by('name')
serializer_class = PegawaiSerializer
结果:
{
"id": 5,
"name": "Ryan",
"alias": "R",
"barangs": [
{
"pegawai": 5,
"nama_barang": "burjo",
"harga_barang": "1234"
},
问题:如何将Pegawai字段从ID更改为Name?像这样:
Question: how can i change pegawai fields from id to name? like this:
{
"id": 5,
"name": "Ryan",
"alias": "R",
"barangs": [
{
"pegawai": Ryan,
"nama_barang": "burjo",
"harga_barang": "1234"
},
我已经搜索了一些解决方案但没有任何效果,我不知道问题出在哪里,因此我需要您的指导。欢呼。
I've searched some solutions but nothing works, I don't know where the problem is, so I need your guide. Cheers.
推荐答案
方法1
由于已定义<在您的 Pegawai
模型中,strong> __ str __()
方法,您可以使用 StringRelatedField(... )
class BarangSerializer(serializers.ModelSerializer):
pegawai = serializers.StringRelatedField()
class Meta:
model = Barang
fields = (
'pegawai',
'nama_barang',
'harga_barang',
)
方法2
使用 CharField
class BarangSerializer(serializers.ModelSerializer):
pegawai = serializers.CharField(source='pegawai.name')
class Meta:
model = Barang
fields = (
'pegawai',
'nama_barang',
'harga_barang',
)
UPDATE-1
要在创建模型对象时解决问题,请覆盖 to_representation()
方法
UPDATE-1
To solve issues while creation of model objects, override the to_representation()
method
class BarangSerializer(serializers.ModelSerializer):
class Meta:
model = Barang
fields = (
'pegawai',
'nama_barang',
'harga_barang',
)
def to_representation(self, instance):
rep = super().to_representation(instance)
rep['pegawai'] = instance.pegawai.name
return rep
这篇关于Django Rest Framework嵌套关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文