小编Tho*_*Liu的帖子

Django-rest-framework中的可写嵌套序列化器?

我的设计如下关于Django ModelSerializer。有模型A和模型B。模型B有模型A的外键字段。由于某些原因,我不能直接使用主键来序列化模型B。我认为,我需要序列化其他两个字段(在模型A中唯一)。

而且我看到SlugRelatedField必须用于一个Slug字段。我搜索了一个NaturalKeyField可以支持NaturalKeyField。但看起来它被django-rest-framework取代。但是我检查了django-rest-framework,根本没有这样的领域。谁能帮忙?我该怎么办?

代码如下。型号A

class AssetModel(models.Model):
    org = models.ForeignKey(Org, related_name='models')
    name = models.CharField(max_length=128)
    model_type = models.SmallIntegerField(default = 3,choices = MODEL_TYPE )
    directory = models.CharField(max_length = 128)
    ...
    class Meta:
        unique_together = ('org', 'name',)
Run Code Online (Sandbox Code Playgroud)

B型

class Dataitem(models.Model):
    mod = models.ForeignKey(AssetModel, related_name='dataitems')
    name = models.CharField(max_length=128)
    data_type = models.SmallIntegerField(default =0,choices = DATAITEM_DATATYPE)
    ...
Run Code Online (Sandbox Code Playgroud)

模型A的序列化器

class AssetModelSerializer(serializers.ModelSerializer):
    org =  serializers.SlugRelatedField(queryset=Org.objects.all(), slug_field='name')
    class Meta:
        model = AssetModel
        fields = ('org', 'name', 'model_type',..
Run Code Online (Sandbox Code Playgroud)

模型B的序列化器

class DataitemSerializer(serializers.ModelSerializer):
    class Meta:
        model = Dataitem
        fields = ('mod', 'name','data_type'...)
Run Code Online (Sandbox Code Playgroud)

模型A的主键只是Django自动添加的ID。序列化模型B时,我需要获取模型A的组织和名称。读和写都需要。

python django rest

4
推荐指数
2
解决办法
3546
查看次数

标签 统计

django ×1

python ×1

rest ×1