Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django Rest框架嵌套关系_Python_Django_Django Rest Framework - Fatal编程技术网

Python Django Rest框架嵌套关系

Python Django Rest框架嵌套关系,python,django,django-rest-framework,Python,Django,Django Rest Framework,我刚开始使用Django,我需要你的帮助 所以,我创建了一个这样的模型 型号.py 我的序列化程序: 序列化程序.py 我的看法: 视图.py 结果: { "id": 5, "name": "Ryan", "alias": "R", "barangs": [ { "pegawai": 5, "nama_barang": "burjo", "harga_barang": "123

我刚开始使用Django,我需要你的帮助

所以,我创建了一个这样的模型

型号.py

我的序列化程序:

序列化程序.py

我的看法:

视图.py

结果:

{
    "id": 5,
    "name": "Ryan",
    "alias": "R",
    "barangs": [
        {
            "pegawai": 5,
            "nama_barang": "burjo",
            "harga_barang": "1234"
        },
问题:如何将pegawai字段从id更改为名称?像这样:

{
    "id": 5,
    "name": "Ryan",
    "alias": "R",
    "barangs": [
        {
            "pegawai": Ryan,
            "nama_barang": "burjo",
            "harga_barang": "1234"
        },

我已经找到了一些解决方案,但没有任何效果,我不知道问题出在哪里,所以我需要你的指导。干杯。

您可以使用DRF RelatedField更改序列化程序中的字段值:

class BarangSerializer(serializers.ModelSerializer):
    pegawai = serializers.RelatedField(source='pegawai.name', read_only=True)
    class Meta:
        model = Barang
        fields = (
                'pegawai', 
                'nama_barang',
                'harga_barang',
                )

您可以使用DRF RelatedField更改序列化程序中的字段值:

class BarangSerializer(serializers.ModelSerializer):
    pegawai = serializers.RelatedField(source='pegawai.name', read_only=True)
    class Meta:
        model = Barang
        fields = (
                'pegawai', 
                'nama_barang',
                'harga_barang',
                )
使用serializers.CharField

使用serializers.CharField

方法1 由于您在
模型中定义了
\uu str\uu()
方法,因此您可以使用


更新-1 要在创建模型对象时解决问题,请重写
To_representation()
方法

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
方法1 由于您在
模型中定义了
\uu str\uu()
方法,因此您可以使用


更新-1 要在创建模型对象时解决问题,请重写
To_representation()
方法

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

这件很有用。。但是当我尝试输入到Barang时,我得到了如下错误:AssertionError:The
.create()
方法默认情况下不支持可写点源字段。为序列化程序
myapi.serializers.BarangSerializer
编写一个显式的
.create()
方法,或在点源序列化程序字段上设置
read\u only=True
。解决方案?解决了,谢谢!但是如果我想把所有的Pegawai都放到BarangSerializer中怎么办?既然你在原始帖子中提到的问题已经解决了,你应该。。谢谢这是我的作品。。但是当我尝试输入到Barang时,我得到了如下错误:AssertionError:The
.create()
方法默认情况下不支持可写点源字段。为序列化程序
myapi.serializers.BarangSerializer
编写一个显式的
.create()
方法,或在点源序列化程序字段上设置
read\u only=True
。解决方案?解决了,谢谢!但是如果我想把所有的Pegawai都放到BarangSerializer中怎么办?既然你在原始帖子中提到的问题已经解决了,你应该。。谢谢
class BarangSerializer(serializers.ModelSerializer):
    pegawali=serializers.CharField(source="pegawali.name")
    class Meta:
        model = Barang
        fields = (
            'pegawai', 
            'nama_barang',
            'harga_barang',
            )
class BarangSerializer(serializers.ModelSerializer):
    pegawai = serializers.StringRelatedField()

    class Meta:
        model = Barang
        fields = (
            'pegawai',
            'nama_barang',
            'harga_barang',
        )
class BarangSerializer(serializers.ModelSerializer):
    pegawai = serializers.CharField(source='pegawai.name')

    class Meta:
        model = Barang
        fields = (
            'pegawai',
            'nama_barang',
            'harga_barang',
        )
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