Python Django(1.11)嵌套序列化程序中的rest framework post user.id

Python Django(1.11)嵌套序列化程序中的rest framework post user.id,python,django,django-rest-framework,Python,Django,Django Rest Framework,当用户在模型中创建交货地址和产品数据时,我想在后台获取user.id,我得到这个错误 “按id排序”列中的ull值违反了NOTNULL约束 详细信息:失败的行包含(665051,TETST,2018-10-11,f,null)。 这意味着由于某种原因,user.id没有被添加到模型中 我的模特 class Product(models.Model): price = models.FloatField() name = models.CharField(default='gift

当用户在模型中创建交货地址和产品数据时,我想在后台获取user.id,我得到这个错误
“按id排序”列中的
ull值违反了NOTNULL约束
详细信息:失败的行包含(665051,TETST,2018-10-11,f,null)。

这意味着由于某种原因,user.id没有被添加到模型中

我的模特

class Product(models.Model):
    price = models.FloatField()
    name = models.CharField(default='gift', max_length=512)
    ordered_by = models.ForeignKey(User, null=False)
    date = models.DateField(auto_now_add=True)
    purchased = models.BooleanField(default=False)

    def __str__(self):
        return self.name


class Delivery(models.Model):
    address = models.CharField(max_length=256)
    city = models.CharField(max_length=128)
    country = models.CharField(max_length=128)
    zip_code = models.IntegerField()  #gotta change that one to charfield
    phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$',
                                 message="Phone number must be entered in the format: '+999999999'."
                                         " Up to 15 digits allowed.")
    phone_number = models.CharField(validators=[phone_regex], max_length=16, blank=False)
    delivered = models.BooleanField(default=False)
    product = models.ForeignKey(Product)  
我的序列化程序.py

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = (
            "name",
            "price",
        )

class ProductDeliverySerializer(serializers.ModelSerializer):
    product = ProductSerializer()

    class Meta:
        model = Delivery
        fields = (
            "address",
            "city",
            "country",
            "zip_code",
            "phone_number",
            "product",
        )

    def create(self, validated_data):
        product_data = validated_data.pop('product')
        print(validated_data, product_data)
        product = Product.objects.create(**product_data)
        delivery = Delivery.objects.create(product=product, **validated_data)
        return delivery
当我打印/测试验证数据时,它实际上显示“表单”/POST已完成
{'address':'address here','city':'city is here','country':'country is here','邮政编码':3333,'电话号码':'+19991234567','ordered_by':}

产品数据的输出([('name','tetst'),('price',5051.0)])

我的观点

class ProductList(generics.ListCreateAPIView):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer

def perform_create(self, serializer):
    serializer.save(ordered_by=self.request.user)


class DeliveryList(generics.ListCreateAPIView):
    queryset = Delivery.objects.all()
    serializer_class = ProductDeliverySerializer

    def perform_create(self, serializer):
        serializer.save(ordered_by=self.request.user)

问题出在
product=product.objects.create(**product\u data)
中。产品数据不包含任何用户对象。它不见了。这可能是如何构造输入JSON的问题。将验证数据中的订购者添加到产品数据中。 大概是这样的:

product_data['ordered_by'] = validated_data.pop('ordered_by')

在您的灭菌器中,没有指定ordered_by字段。我想将其保留在后台tho中,因此它在后台执行此操作(如request.user),并且只在后台执行。没有实际需要张贴它,不知道我现在是否可以这样做。我对DRF很陌生打印(productdata)的输出是什么?@a_k_v更新后的输出是
OrderedDict([('name','test_product'),('price',5051.0)]
这就是问题哦,我的上帝,这确实有效(尽管我稍微编辑了我的产品序列化程序)
类产品序列化程序(serializers.ModelSerializer):class Meta:model=产品字段=(“名称”、“价格”、“订购人”),只读字段=(“订购人”)