【发布时间】:2014-08-20 21:48:27
【问题描述】:
我在发布到我的一个端点时遇到错误。错误文本是:
"<Customer: person@example.com>"需要为字段"customer"设置一个值,然后才能使用这种多对多关系。
客户模型设置为与地址模型具有 m2m 关系,并添加了空白/null/default=None 以使其可选。
如果在序列化程序中我注释掉帐单地址字段,我的帖子会成功并创建一个新客户。
我尝试了几种有效负载,我将帐单地址指定为null、[] 和"",但均无济于事。
型号
class Customer(TimeStamped):
# required
email = models.EmailField(max_length=255, unique=True)
has_agreed_to_terms = models.BooleanField(default=False)
## extras
# system id
user = models.OneToOneField('vauth.User', related_name='customer', blank=True, null=True, default=None)
# email preferences
subscription_type = models.CharField(max_length=255, blank=True, null=True, default=None)
unsubscribed_date = models.DateTimeField(blank=True, null=True, default=None)
email_frequency = models.CharField(max_length=255, null=True, blank=True, default='Weekly')
# addresses
billing_addresses = models.ManyToManyField('common.Address', related_name='billing_addresses_set', blank=True, null=True, default=None)
shipping_addresses = models.ManyToManyField('common.Address', related_name='shipping_addresses_set', blank=True, null=True, default=None)
# time stamps
date_joined = models.DateTimeField(default=timezone.now, db_index=True)
first_purchase_date = models.DateTimeField(blank=True, null=True, default=None, db_index=True)
last_purchase_date = models.DateTimeField(blank=True, null=True, default=None, db_index=True)
# purchases
number_of_purchases = models.IntegerField(default=0)
# braintree
braintree_id = models.CharField(max_length=255, blank=True, null=True, default=None)
序列化器
class CustomerSerializer(serializers.HyperlinkedModelSerializer):
user = serializers.HyperlinkedRelatedField(view_name='user-detail', required=False)
billing_addresses = serializers.HyperlinkedRelatedField(many=True, view_name='address-detail', required=False)
# shipping_addresses = serializers.HyperlinkedRelatedField(many=True, view_name='address-detail', required=False)
class Meta:
model = Customer
fields = (
'url', 'id', 'email', 'has_agreed_to_terms', 'user', 'billing_addresses', #'shipping_addresses',
'subscription_type', 'unsubscribed_date', 'email_frequency',
'date_joined', 'first_purchase_date', 'last_purchase_date', 'number_of_purchases', 'braintree_id',
)
【问题讨论】:
-
您收到“客户”字段的错误有点奇怪。您确定问题出在帐单地址上吗?
-
这是一个例子——它发生在任何使用 M2M 字段的地方。另一个例子是用户 组关系。
标签: django django-rest-framework