【发布时间】:2013-12-02 21:52:03
【问题描述】:
我有一个从 django.contribut.auth 的用户模型扩展而来的模型的 Tastypie 资源(只是一些额外的字段)。这是资源代码:
class CustomerResource(ModelResource):
locations = fields.ToManyField('device.resources.LocationResource',
'location_set', null=True)
current_location = fields.ToOneField('device.resources.LocationResource',
'current_location', null=True)
default_location = fields.ToOneField('device.resources.LocationResource',
'default_location', null=True)
class Meta:
queryset = Customer.objects.all()
resource_name = 'customers'
validation = CleanedDataFormValidation(form_class=RegistrationForm)
list_allowed_methods = ['get', 'post']
detail_allowed_methods = ['get', 'put', 'patch', 'delete']
authorization = Authorization()
excludes =['is_superuser', 'is_active', 'is_staff', 'password', 'last_login',]
filtering = {
'location': ('exact'),
}
def obj_create(self, bundle, **kwargs):
bundle.data['username'] = bundle.data['email']
return super(CustomerResource, self).obj_create(bundle, **kwargs)
我希望能够使用从表单中收集的一些 JSON(它不能只是表单数据,因为我需要进行一些处理)对 API 进行 POST 以创建用户。这是我发布到 API 的 Django 代码:
payload = {}
payload['email'] = request.POST['username']
payload['username'] = request.POST['username']
payload['password1'] = request.POST['password1']
payload['password2'] = request.POST['password2']
payload = json.dumps(payload)
customer = requests.post(self.base_url + '/v1/customers/', data=payload, headers=headers)
这发布了一个客户罚款 - 它存在于 API 的数据库中。但是,由于某种原因,其密码未注册。密码属性为空,而如果我在 API 的数据库中本地创建用户,密码将显示为加密哈希。 has_usable_password 字段设置为 false。如果我尝试payload['password'] = request.POST['password1'],也会发生同样的事情。有什么建议么?
我的客户模型:
class Customer(AbstractUser):
current_location = models.ForeignKey('device.Location',
null=True, blank=True, related_name='customers_present')
default_location = models.ForeignKey('device.Location',
null=True, blank=True, related_name='default_customers')
def __unicode__(self):
return u'{0}'.format(self.username)
【问题讨论】:
-
你的
Customer型号是什么? -
它继承自 django.contrib.auth.models.User。上面添加了