【问题标题】:Assign Same Value to Django Rest Framework为 Django Rest Framework 分配相同的值
【发布时间】:2020-07-22 06:22:29
【问题描述】:

我在使用 Django 和 React 时遇到了一个问题。我正在使用 Django Rest Framework 来序列化对象,但是我在 React 的前端遇到了一个错误,说每个对象都需要一个“键”属性。

我一直想知道是否有可能,看到有一个默认 ID,在 Rest Framework 中添加另一个与 Django 模型的主键字段具有相同值的字段?结合上下文,假设我有这个:

# models.py

class Todo(models.Model):
    # the id field is auto-generated by django
    title = models.CharField(_('title'), max_length=50)
    desc = models.TextField(_('description'), max_length=500, blank=True)
    created = models.DateTimeField(_('date created'), auto_now_add=True)

    def __str__(self):
        return self.title

如果我可以在下面做这样的事情,是否有可能?

# serializers.py

class TodoSerializer(serializers.ModelSerializer):
    # assign the value of id to a new field named "key"            <-- this action!!!
    title = serializers.CharField(max_length=50, trim_whitespace=True)
    desc = serializers.CharField(max_length=500, allow_blank=True)
    created = serializers.DateTimeField()

    class Meta:
        model = Todo
        fields = ['id', 'key', 'title', 'desc', 'level', 'created']

我想这样做的原因是 React 识别“key”属性而不是“id”,这导致我遇到了这个问题。同时,我不想丢弃“id”列,因为迁移数据会很繁重(里面已经有条目)。

提前致谢。

【问题讨论】:

    标签: python django django-rest-framework key serialization


    【解决方案1】:

    是的!

    key = serializers.IntegerField()
    

    然后在您的类视图中将键值分配为 id-value。

    如果不想使用类视图赋值,可以在序列化器类上使用自定义对象,设置key-value。

    【讨论】:

      【解决方案2】:

      也许是这样的:

      key = serializers.IntegerField(source='id', read_only=True)
      

      【讨论】:

        【解决方案3】:

        我对 react 不是很熟悉,但据我所知,react 需要一个键来跟踪循环中的项目。因此,密钥必须是唯一的,并且可以为此使用 ID。

        const todoItems = todos.map((todo) =>
          <li key={todo.id}>    
              {todo.text}
          </li>
        );
        

        你也可以使用循环的索引。

        const todoItems = todos.map((todo, index) =>
          // Only do this if items have no stable IDs  
          <li key={index}>    
              {todo.text}
          </li>
        );
        

        另外,将read_only_fields = ('id',) 添加到序列化程序的 Meta 类中

        【讨论】:

          猜你喜欢
          • 2021-11-10
          • 2015-03-02
          • 2017-03-07
          • 1970-01-01
          • 2016-09-14
          • 2015-03-24
          • 1970-01-01
          • 2017-04-27
          • 1970-01-01
          相关资源
          最近更新 更多