[英]Django Tastypie - OneToOne Relationship POST doesn't work
I keep getting this response error no matter what I try. 无论我如何尝试,我都会不断收到此响应错误。 The method seems to work perfectly for ManyToOne Relationships however fails in OneToOne.
该方法似乎可用于ManyToOne关系,但是在OneToOne中失败。 Please help if anyone has encountered and solved this before:
如果有人遇到过并解决了此问题,请提供帮助:
400 BAD REQUEST
{"error": "The 'order' field has no data and doesn't allow a default or null value."}
Debugging trials: 调试试用:
Request: 请求:
curl -X "POST" "http://localhost:5000/core/api/v1/order/" \
-H "Content-Type: application/json" \
-d "{\"source\":\"W\",\"delivery_detail\":{\"email\":\"valery.flemister@yam.com\"}}"
Models: 楷模:
class Order(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
created_at = models.DateTimeField(
verbose_name='created at',
auto_now_add=True
)
updated_at = models.DateTimeField(
verbose_name='updated at',
auto_now=True
)
SOURCE_TYPES = (
('I', 'iOS'),
('A', 'Android'),
('W', 'Web'),
('N', 'Not Applicable')
)
source = models.CharField(
verbose_name='order source',
max_length=1,
choices=SOURCE_TYPES,
default='N'
)
class DeliveryDetail(models.Model):
order = models.OneToOneField(
to=Order,
primary_key=True
)
email = models.EmailField(
verbose_name='email address',
max_length=255,
blank=True,
null=True
)
API: API:
class OrderResource(ModelResource):
delivery_detail = fields.ToOneField(
to='core.api.v1_order.DeliveryDetailResource',
attribute='deliverydetail',
related_name='order',
help_text='Delivery details',
full=True
)
class Meta:
queryset = Order.objects.all()
resource_name = 'order'
class DeliveryDetailResource(ModelResource):
order = fields.ToOneField(
to=OrderResource,
attribute='order'
)
class Meta:
queryset = DeliveryDetail.objects.all()
resource_name = 'delivery_detail'
OneToOne Fields don't allow null values. OneToOne字段不允许使用空值。 So at the time, you want to create your Delivery, the order hasn't been created yet, so the order is null.
因此,当时您要创建交货,但尚未创建订单,因此订单为空。 Either split the request for Order first and then Delivery, or set the
ToOneField
attribute null=True
请先拆分对订单的请求,然后再拆分交付,或者将
ToOneField
属性设置为null=True
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.