第一个模型:
class Profile(models.Model):
username = models.CharField(
_('username'),
max_length=150,
unique=True,
help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
validators=[
validators.RegexValidator(
r'^[\w.@+-]+$',
_('Enter a valid username. This value may contain only '
'letters, numbers ' 'and @/./+/-/_ characters.')
),
],
error_messages={
'unique': _("A user with that username already exists."),
},
)
password = models.CharField(max_length=12, default='123456')
first_name = models.CharField(_('first name'), max_length=30, blank=True)
last_name = models.CharField(_('last name'), max_length=30, blank=True)
email = models.EmailField(_('email address'), blank=True)
date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
第二种模式:
class UserEbiz(models.Model):
user_id = models.ForeignKey('Profile')
password = models.CharField(max_length=12, default='123456')
Tastypie资源:
class ProfileResources(ModelResource):
id = fields.CharField(attribute='id')
class Meta:
queryset = Profile.objects.all()
resource_name = 'profile'
filtering = {
"id": ALL,
}
我想创建一个只使用一个资源可以同时为两个表保存值的函数。我的问题是如何使用ProfileResources将值发布到Profile和UserEbiz模型中。
答案 0 :(得分:2)
@ sean-hayes答案很好但是如果你真的想Post
ProfileResource
数据而不是UserEbiz
首先将ProfileResource
更改为
class ProfileResource(ModelResource):
ebiz = fields.ToManyField(UserEbizResource, 'userebiz_set', readonly=True)
请注意首先您有ForeignKey
Profile
。因此1:M
与Profile
UserEbiz
为readonly
。
第二次我已将UserEbiz
设置为true,因为我将自己处理models.ForeignKey('Profile', blank=True, null=True)
数据。但是,如果您有M2M
,那就像创建readonly
数据一样,只需删除override
属性即可。
因此,obj_create
ebiz
可以自己处理def obj_create(self, bundle, **kwargs):
ebiz = bundle.data.pop('ebiz', None)
bundle = super(ProfileResource, self).obj_create(bundle, **kwargs)
if not ebiz:
return bundle
ebiz.update(user_id=bundle.obj) # change it to user in model and here
ebiz_res = UserEbizResource()
ebiz_bundle = ebiz_res.build_bundle(data=ebiz)
ebiz_res.obj_create(ebiz_bundle)
return bundle
数据。代码可能看起来像
$(document.body).on('change','input[type=checkbox]',function(){
if ($(this).prop('checked') == 1){
alert('checked');
}else{
alert('unchecked');
}
答案 1 :(得分:1)
你会想要这样的东西:
class UserEbizResource(ModelResource):
user_id = fields.ToOneField(ProfileResources, attribute='user_id')
class Meta:
queryset = UserEbiz.objects.all()
resource_name = 'userebiz'
excludes = ['password']
filtering = {
"id": ALL,
}
其他一些建议:
ProfileResources
重命名为ProfileResource
UserEbiz.user_id
重命名为UserEbiz.profile