【问题标题】:DRF error create() got multiple values for keyword argument 'hnid'DRF 错误 create() 为关键字参数“hnid”获取了多个值
【发布时间】:2021-04-29 08:44:29
【问题描述】:

所以我正在构建一个宠物博客项目,我的场景是 - 我的用户可以在这样做的同时发布多个图像和音频,但我面临着几个问题 -

  1. 尝试通过 POSTMAN 发帖时。我收到一条错误消息,说 create() 为关键字参数 'hnid' 获取了多个值。
  2. 在使用 UUID 查询时,它正在抛出一个名为“HNUsers 对象 (e3ec1a43-ebc4-47b9-bf2f-55967af8ea71)”的字符串,我只想要 UUID(e3ec1a43-ebc4-47b9-bf2f-55967af8ea71) 但附带了额外的HNUsers 对象

这是我的个人资料模型

class HNUsers(models.Model):
    USERTYPE = (
        (u'RU', u'REGULAR USER'),
        (u'HN', u'HN'),
    )

    GENDER = (
        (u'M', u'Male'),
        (u'F', u'Female'),
        (u'O', u'Other'),
    )

    ip_address = models.CharField("IP Address" , max_length=100, blank=True, null=True)
    full_name = models.CharField("Full Name", max_length=100, null=True, blank=True)
    username = models.CharField("Username", max_length=100, null=True, blank=True)
    email = models.EmailField("Email", blank=True, null=True)
    user_type = models.CharField("User Type", max_length=2, choices=USERTYPE, null=True, blank=True, default=USERTYPE[0][0])
    mobile_number = models.CharField("Mobile Number", max_length=20, blank=True, null=True)
    date_of_birth = models.DateField("Date of Birth", auto_now_add=False, blank=False, null=True)
    gender = models.CharField("Gender", max_length=1, choices=GENDER, blank=True, null=True, )
    registration_date = models.DateTimeField("Registration Date", auto_now_add=True, null=True, blank=True)
    city = models.CharField("City", max_length=50, blank=True, null=True)
    country = models.CharField("Country", max_length=50, blank=True, null=True)
    profile_img = models.ImageField("Profile Image", blank=True, null=True)
    first_img = models.FileField("First Image", blank=True, null=True)
    first_img_url = models.CharField("First Image Url", blank=True, null=True, max_length=500)
    profile_img_url = models.CharField("Profile Image Url", blank=True, null=True, max_length=500)
    hnid = models.UUIDField("HNID", default=uuid.uuid4, unique=True, primary_key=True, editable=False)

我的图片发布模型

class ImagePost(models.Model):
    hnid = models.ForeignKey("profiles.HNUsers", on_delete=models.DO_NOTHING)
    file = models.FileField("Image", blank=True, null=True)
    timestamp = models.DateTimeField("Timestamp", blank=True, null=True, auto_now_add=True)
    text = models.TextField("Description text", blank=True)

    class Meta:
        verbose_name_plural = "Image Posts"

图片帖子的序列化器

class MultiMediaSerializer(serializers.ModelSerializer):
    file = serializers.ListField(child=serializers.FileField(max_length=100, allow_empty_file=False, use_url=True))

    def create(self, validated_data):
        request = self.context.get('request')
        # print(validated_data)
        files = validated_data.pop('file')
        print(files)
        user = HNUsers.objects.get(pk=request.data['hnid'])

        print("hnid ", user)
        # print("hnid ", entry)
        for img in files:
            print(img)
            photo = ImagePost.objects.create(file=img, hnid=user,  **validated_data)
        return photo

    class Meta:
        model = ImagePost
        fields = ('hnid', 'file',)

上面的Views.py文件是-

@api_view(['POST'])
@permission_classes((permissions.AllowAny,))
@parser_classes([MultiPartParser, FormParser])
def posting_api(request):
    if request.method == 'POST':
        data = request.data
        print(data)

        serializer = MultiMediaSerializer(data=data, context={'request': request})
        if serializer.is_valid():
            serializer.save()
            print("image object saved")
    return Response(serializer.data, status=status.HTTP_201_CREATED)

对不起,我是新手

【问题讨论】:

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


    【解决方案1】:

    从 create 语句中删除 hnid=user,因为 validated_data 确实已经有 hnid 字段

     photo = ImagePost.objects.create(file=img,  **validated_data)

    【讨论】:

    • 谢谢 .. 它可以工作,但会出现“HNUsers object (e3ec1a43-ebc4-47b9-bf2f-55967af8ea71)”我怎样才能从中获取 UUID?抱歉这个愚蠢的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 2016-06-24
    • 2015-05-18
    • 1970-01-01
    相关资源
    最近更新 更多