【问题标题】:Django Rest Framework auto increment primary key valueDjango Rest Framework 自动增加主键值
【发布时间】:2014-07-28 04:13:01
【问题描述】:

我是使用 DRF 的新手,所以如果这是一个微不足道的问题,我深表歉意,但到目前为止我还没有找到答案。

我正在使用 DRF 和 Angularjs 来创建单页应用程序。当我向我的 API 发布帖子时,我收到此错误以创建一个新的 Task 对象:task_id: [This field is required.] task_id 是我在此对象上的主键。我怎样才能让它像在 Django 模型表单上一样自动递增?

class TaskSerializer(serializers.ModelSerializer):         

    class Meta:                                                      
        model = Task                                       
        fields = ('route', 'date', 'task_id', )                    

class AddTask(generics.CreateAPIView):          
    serializer_class = TaskSerializer                                                    

    def get(self, request, format=None):                  
        response = {}                                     

        response['form'] = TaskForm().as_p()    

        return Response(response)  

【问题讨论】:

  • 您是否在应用程序页面中使用了task_id?如果没有,则将其从序列化程序中删除,DRF 将自动为您处理此问题
  • 好吧,我觉得自己很愚蠢。做到了。以前我没有在我的 Meta 类中明确地将任何字段分配给 fields,我得到了那个错误。我想那是因为我有一个唯一的主键值 task_id 而不是 id
  • cool..我会添加答案然后:)

标签: django django-rest-framework


【解决方案1】:

您是否在申请页面中使用task_id?如果没有,则将其从序列化程序中删除,DRF 会自动为您处理。

类似这样的:

class TaskSerializer(serializers.ModelSerializer):         

    class Meta:                                                      
        model = Task                                       
        fields = ('route', 'date',)

【讨论】:

  • 如果我没有提到 'id' 作为字段,如何通过这个序列化程序进行更新?
  • 您到底想达到什么目的?是否要序列化更新查询集?
  • 我想用自动增量 pk 将 INSERT 和 UPDATE 放入表中。如果我没有按照您的建议包含“id”字段,那么更新应该如何工作?
  • 由于在这种情况下 'id' 是一个自动字段,django 在插入时会自动创建一个 id(将是串行的)。在更新操作期间,我们需要获取记录并使用链接中提到的更新(docs.djangoproject.com/en/1.7/topics/db/queries/…)命令。
  • 您需要在“任务模型”中定义自动增量字段,序列化程序用于验证。序列化器用于验证传入数据并将 JSON 转换为我们可以用于创建、检索、更新和删除表(模型)中的信息的 python 数据格式。自动递增的字段不是传入的数据,而是由 Django 在 create 方法中自动实现的。
猜你喜欢
  • 1970-01-01
  • 2016-07-09
  • 2018-06-05
  • 2021-04-21
  • 1970-01-01
  • 2011-04-26
  • 2010-12-09
  • 2015-03-27
  • 2020-07-18
相关资源
最近更新 更多