Python Django(1.11)嵌套序列化程序中的rest framework post user.id
当用户在模型中创建交货地址和产品数据时,我想在后台获取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
“按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=产品字段=(“名称”、“价格”、“订购人”),只读字段=(“订购人”)