django rest-framework是否会强制外键指向主键?

时间:2018-10-06 13:14:37

标签: django django-rest-framework

在django中,定义一个指向唯一键列而不是主键的外键是绝对好的。例如

class Cluster(models.Model):
    _id = models.UUIDField(unique=True, null=False, default=uuid.uuid1)
    name = models.CharField(max_length=200, unique=True, null=False)

class Node(models.Model):
    _id = models.UUIDField(unique=True, null=False, default=uuid.uuid1)
    ip = models.GenericIPAddressField(null=False, unique=True)
    cluster = models.ForeignKey(Cluster, on_delete=models.PROTECT, to_field='_id', db_constraint=False)

请注意,此处的_id字段不是pk字段。

但是在Django rest-framework中,定义序列化器

class NodeSerializer(serializers.ModelSerializer):
    cluster_id = serializers.PrimaryKeyRelatedField(
        source='cluster', queryset=models.Cluster.objects.all())

    class Meta:
        model = models.Node
        fields = ('_id', 'name', 'ip', 'cluster_ip', 'cluster_id')

序列化程序将认为cluster_id指向集群的pk字段。

有什么办法可以告诉序列化程序cluster_id没有指向pk吗?

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找SlugRelatedField

cluster_id = serializers.SlugRelatedField(
        source='cluster', slug_field='_id', queryset=models.Cluster.objects.all())