2013-06-03 5 views
1

У меня есть tastypie ресурс какпредотвратить tastypie от обновления ForeignKey поля

class MembershipResource(ModelResource): 
    user = fields.ForeignKey(UserResource, 'user')  
    activity = fields.ForeignKey(ActivityResource, 'activity') 
    class Meta: 
     authorization=Authorization() 
     authentication=ApiKeyAuthentication() 

Теперь, это хорошо работает, когда я пост к этому ресурсу с данными, как

{ 
user: "/api/v1/user/username/", 
activity: "/api/v1/activity/2/" 
} 

Но, если я передайте полные данные пользователя с именем пользователя, идентификатором и т. д., TastyPie обновляет auth_user и изменяет данные аутентификации (я не могу войти в систему с пользователем до сброса пароля в оболочке django)

Есть ли простой способ сделать fields.ForeignKey (ForeignResource), чтобы предотвратить обновление ForeignResource?

EDIT:

я могу сделать это с помощью гидрата или иного параметра. Например:

def hydrate_user(self, bundle): 
    user = UserNameResource() 
    userbundle = user.build_bundle(data=bundle.data['user'], request=bundle.request) 
    userobj = user.full_hydrate(userbundle).obj   
    bundle.data['user'] = userobj     
    return bundle 

Или даже с использованием псевдополя, называемого user_id. Но я придерживаюсь мнения, что это очень распространенная проблема, и там должен быть более простой способ сделать это с помощью опции в поле. ForeignKey.

+0

Нельзя ли исключить определенные поля в таблице пользователей? – karthikr

+0

Мне нужно связать существующего пользователя. Поэтому я не могу исключить поле. Я редактировал вопрос для получения дополнительной информации. Благодарю. – Sundar

ответ

0

Если вы точно знаете, что не хотите обновлять поле пользователя, вы можете использовать параметр readonly в поле.

user = fields.ForeignKey(UserResource, 'user', readonly=True) 
+0

Я тоже пробовал эту опцию. Параметр «только для чтения» не позволяет даже установить значение внешнего ключа ресурса. – Sundar

+0

ОК. Поэтому не передавайте все пользовательские данные. Передайте только идентификатор пользователя. – ge7600

+0

Да. Если я передаю только URI ресурса, все в порядке. Но, если я передаю объект пользователя вместо URI, обновляется внешний ресурс поля (в данном случае Пользователь). Я проследил это обновление с функцией «save_related» класса ModelResource. Я затрону эту проблему в GitHub. – Sundar

Смежные вопросы