2016-03-26 2 views
1

У меня есть модель, которая простирается Джанго User модели:TastyPie: ToManyField связанных ресурсы

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    avatar = models.CharField(max_length=40, default='0') 
    activation_key = models.CharField(max_length=40, blank=True) 
    key_expires = models.DateTimeField(default=django.utils.timezone.now) 
    contacts = models.ManyToManyField(User, related_name='contacts') 

Как вы можете видеть, есть поле contacts. С помощью этого поля каждый пользователь может иметь список контактов (например, в Skype или в социальной сети). Но я хочу использовать его в своих ресурсах тастипии. У меня есть два ресурса:

class UserProfileResource(ModelResource): 
    class Meta: 
     queryset = UserProfile.objects.all() 
     authentication = SessionAuthentication() 
     authorization = DjangoAuthorization() 
     allowed_methods = ['get'] 
     resource_name = 'profile' 
     excludes = ['id'] 
     include_resource_uri = False 

class UserResource(ModelResource): 
    userprofile = fields.ToOneField(UserProfileResource, 'userprofile', null=True, full=True) 
    contacts = fields.ToManyField(UserProfileResource, 'contacts', related_name='contacts', null=True, full=True) 

    class Meta: 
     queryset = User.objects.all() 
     fields = ['first_name', 'last_name', 'email', 'date_joined', 'last_login', 'userprofile', 'contacts'] 
     allowed_methods = ['get', 'post', 'patch'] 
     resource_name = 'user' 
     detail_uri_name = 'username' 
     authentication = SessionAuthentication() 
     authorization = DjangoAuthorization() 

Все в порядке, но когда я делаю запрос GET, контактные контакты не работают. Я просто не могу понять, как отображать список других пользователей в моем поле контактов в ресурсе TastyPie. Кстати, на странице администрирования Django я вижу список контактов, а также могу его редактировать.

Итак, эта реализация ресурса tastypie дает возможность получить список пользователей, добавивших текущего пользователя в собственный список контактов. Но мне нужен список контактов текущего пользователя. Что я делаю неправильно?

ответ

0

С contacts в модели UserProfile, а не в модели User, соответствующее поле ресурса должно начинаться с UserProfileResource вместо UserResource.

В любом случае, я рекомендую поставить contact на пользовательский объект пользователя вместо модели профиля; это упростит ваш код и сохранит соединения БД, если вы сделаете все, что связано с пользователем, а не связано с таблицей, связанной с пользователем.

+0

Это не работает, если я положил поле 'contacts' в' UserProfileResource' с ошибкой _maximum depth глубины рекурсии при вызове объекта Python_. – Gooman

+0

Возможно, вы можете предложить какое-то решение, используя пользовательский объект User? – Gooman

+0

О, я пропустил, что 'contact' фактически использует' UserProfileResource', он должен использовать 'UserResource', так как' contacts' является m2m в модели User, а не модель UserProfile. –

0

contacts находится на UserProfile, а не в User и contacts является User типа, не UserProfile:

contacts = fields.ToManyField(UserResource, 'userprofile__contacts', related_name='contacts', null=True, full=True) 

Если Вам действительно нужно UserProfile, попробуйте:

contacts = fields.ToManyField(UserProfileResource, 'userprofile__contacts__userprofile', related_name='contacts', null=True, full=True) 

, но я не могу гарантировать, что это будет работать. Это только идея.

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

  • Нет связанных вопросов^_^