我的设计如下关于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的组织和名称。读和写都需要。