【问题标题】:Django REST-framework Serializer pk field?Django REST-framework Serializer pk 字段?
【发布时间】:2013-03-14 19:53:26
【问题描述】:

Django-REST-framework中Serializer类中的pk字段是什么?

我假设它是主键,但名称“pk”是保留词吗? Serializer 类如何知道这是 Snippet 模型的主键?

我在 Snippet 模型中没有看到名为“pk”的字段。

class SnippetSerializer(serializers.Serializer):
    pk = serializers.Field()  # Note: `Field` is an untyped read-only field.
    title = serializers.CharField(required=False,
                                  max_length=100)
    code = serializers.CharField(widget=widgets.Textarea,
                                 max_length=100000)
    linenos = serializers.BooleanField(required=False)
    language = serializers.ChoiceField(choices=LANGUAGE_CHOICES,
                                       default='python')
    style = serializers.ChoiceField(choices=STYLE_CHOICES,
                                    default='friendly')

....类 SnippetSeralizer 继续

class Snippet(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    title = models.CharField(max_length=100, blank=True, default='')
    code = models.TextField()
    linenos = models.BooleanField(default=False)
    language = models.CharField(choices=LANGUAGE_CHOICES,
                                default='python',
                                max_length=100)
    style = models.CharField(choices=STYLE_CHOICES,
                             default='friendly',
                             max_length=100)

    class Meta:
        ordering = ('created',)

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    pk 是位于 django.db.models 中的基类 Model 上的属性:

    class Model(object):
        ...
        pk = property(_get_pk_val, _set_pk_val)
        ...
    

    用于标识模型的主键。我没有使用过 Django-REST,但他们可能只是将其映射到模型上的字段。

    【讨论】:

    • 太糟糕了,它不只是称为 primary_key 或 PrimaryKey 或其他明确的名称。会更容易猜出那是什么。
    【解决方案2】:

    如果您在 Django REST Framework 中使用通用视图,并且您想为 pk 字段使用不同的名称——比如 id,您可以在视图中将 lookup_field 设置为 id

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-05
      • 2021-08-07
      • 2017-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      相关资源
      最近更新 更多