【问题标题】:ValueError: Cannot assign "[<CustomUser: User1>]": "Table1.userID" must be a "CustomUser" instanceValueError:无法分配“[<CustomUser:User1>]”:“Table1.userID”必须是“CustomUser”实例
【发布时间】:2021-09-05 03:20:39
【问题描述】:

class Table1(models.Model):
    Name = models.CharField("Name", max_length=50, default=None, null=True, blank=True)
    Department = models.CharField("Department", max_length=100, default=None, null=True, blank=True)
    userID = models.ForeignKey(CustomUser, on_delete=models.CASCADE, default=None, null=True)

我正在尝试通过 axios 发布 form_data,但这个 ValueError 不断出现。此外,如果我以 json 形式发送相同的数据,它接受但不是 form_data。

尝试执行此操作:

obj, create = Table1.objects.update_or_create(userID=request.user, defaults= data)

这里:datarequest.data.copy()

我需要在 form_data 中发布此内容,因为我正在上传图片。请帮忙。

@api_view(['POST'])
@permission_classes([IsAuthenticated])
def table1_list(request):
      data=request.data.copy()
      data['userID'] = request.user
      print(data)

      obj, create = Table1.objects.update_or_create(userID=request.user, defaults= data)
      id = obj.id
      res = {
          "id": id,
      }
      return Response(res, status=status.HTTP_201_CREATED)

【问题讨论】:

  • 请分享您的Table1 模型和整个视图。
  • class Table1(models.Model): Name = models.CharField("Name", max_length=50, default=None, null=True, blank=True) Department = models.CharField("Department ", max_length=100, default=None, null=True, blank=True) userID = models.ForeignKey(CustomUser, on_delete=models.CASCADE, default=None, null=True)
  • edit提问。

标签: django-models django-rest-framework django-views axios


【解决方案1】:

userID 作为参数传递给update_or_createdefaults= 没有多大意义。此外,通过使用request.data.copy() 将创建另一个QueryDict,但QueryDict 是一个将字符串映射到值的列表 的集合,因此不是单个值。

因此您可能希望与:

@api_view(['POST'])
@permission_classes([IsAuthenticated])
def table1_list(request):

      obj, create = Table1.objects.update_or_create(
          userID=request.user,
          defaults=request.data.dict()
      )
      id = obj.id
      res = {
          'id': id,
      }
      return Response(res, status=status.HTTP_201_CREATED)

不过,我建议使用 序列化器 将数据转换为模型对象。这里我们不做任何验证数据是否有意义。

【讨论】:

  • 如果我在 table1 中有一个外键(比如说来自 Table2),那么我不能使用 request.user。那该怎么办呢?
  • @Durgendra:先创建一个Table2对象,或者在数据库中查找,然后与update_or_create(userID=request.user, my_foreignkey=table2_instance, defaults=request.data.dict())一起传递
猜你喜欢
  • 1970-01-01
  • 2023-03-18
  • 2018-06-03
  • 1970-01-01
  • 2019-11-14
  • 2020-04-04
  • 2021-05-05
  • 1970-01-01
相关资源
最近更新 更多