Использование ресурса deliciouspie в представлении

мой первый вопрос здесь:

Итак, я использую вкусный пирог, чтобы иметь api для моего приложения.

Я хочу, чтобы у меня была возможность использовать deliciouspie для рендеринга json, а затем включить его в представление django, чтобы я мог загружать данные своего приложения.

Пример этого можно найти в кулинарной книге tastypie django здесь: http://django-tastypie.readthedocs.org/en/latest/cookbook.html # using-your-resource-in-regular-views

Проблема в том, что я НЕ МОГУ заставить это работать, я пробовал варианты от более простого к более сложному, и я просто не могу это понять, вот код для моих моделей :

class ChatMessage(models.Model):
     content = models.TextField()
     added = models.DateTimeField(auto_now_add=True)

     author = models.ForeignKey(ChatUser, related_name="messages")
     chat_session = models.ForeignKey(ChatSession, related_name="messages")
     answer_to = models.ForeignKey('self', blank=True, null=True)

     flagged = models.BooleanField(blank=True,default=False)
     mododeleted = models.BooleanField(blank=True,default=False)
     mododeleted_by = models.ForeignKey(ChatUser,blank=True,null=True,default=None)
     mododeleted_at = models.DateTimeField(blank=True,null=True,default=None)
     [...]

class ChatSession (models.Model):
    title = models.CharField(max_length=200)
    link_title = models.CharField(max_length=200)
    description = tinymce_models.HTMLField()
    date = models.DateTimeField()
    online = models.BooleanField(default=False)
    next_session = models.BooleanField(default=False)
    meps = models.ManyToManyField(ChatMep)
    uid_newsupdate = models.CharField(max_length=200,blank=True,null=True,default="")
    [...]

и мои ресурсы:

class ChatMessageResource(MyModelResource):
    chat_session = fields.ForeignKey(ChatSessionResource, 'chat_session')

    def renderOne(self,request,pkval):
       data =  self.obj_get(None,pk=pkval)
       dbundle = self.build_bundle(obj=data,request=request)
       return self.serialize(None,self.full_dehydrate(dbundle),'application/json')

    def dehydrate(self, bundle):
        bundle.data['likes'] = bundle.obj.get_likes()
        bundle.data['likes_count'] = len(bundle.data['likes'])
        return bundle

    class Meta:
        authentication = Authentication()
        authorization = Authorization()
        queryset = ChatMessage.objects.all()
        resource_name = 'message'
        fields = ('content', 'added', 'flagged', 'mododeleted','author','answer_to','chat_session')
        filtering = {
            'chat_session': ALL_WITH_RELATIONS,
        }

и мой индекс представления:

def index(request):

    cur_sess = get_current_chat_session()

    data1= ChatMessageResource().renderOne(request,723)

    return render_to_response('test.html',
                          { 
                            'all_data' : data1 
                           },
                          context_instance=RequestContext(request))

Я хочу, чтобы моя функция renderOne () предоставила мне json ОДНОГО ChatMessageResource А также мне нужен renderAll ( ), чтобы получить ВСЕ (или отфильтрованные) ChatMessageResources в json.

И я хочу использовать внутреннее устройство вкусное пирожное, Я ЗНАЮ, что могу сериализовать его сам, но не в этом суть ..

Сейчас ошибка:

NoReverseMatch at /live/

Reverse for 'api_dispatch_detail' with arguments '()' and keyword arguments '{'pk': 14L, 'resource_name': 'session'}' not found.

Я просто схожу с ума, я пытался часами.

Итак, пожалуйста, как получить ОДИН / ВСЕ ресурс в формате JSON с помощью кода с помощью deliciouspie в представлении django!

Если это неясно или мне нужно уточнить, пожалуйста, просто спросите, спасибо

На самом деле я хочу получить JSON, возвращаемый по URL-адресу API, который я создал, но из кода, а не путем посещения URL-адрес .. Итак, если у меня есть / api / v1 / messages /? chat_session = 14 , которые возвращают список сообщений, я хочу иметь возможность делать то же самое с помощью кода (а не путем получения URL-адреса с завитком или как то пожалуйста).

Примечание: определение ModelResource.obj_get из https://github.com/toastdriven/django-tastypie/blob/master/tastypie/resources.py

def obj_get(self, request=None, **kwargs):
            """
    A ORM-specific implementation of ``obj_get``.

    Takes optional ``kwargs``, which are used to narrow the query to find
    the instance.
    """
            try:
                base_object_list = self.get_object_list(request).filter(**kwargs)
                object_list = self.apply_authorization_limits(request, base_object_list)
                stringified_kwargs = ', '.join(["%s=%s" % (k, v) for k, v in kwargs.items()])

                if len(object_list) <= 0:
                    raise self._meta.object_class.DoesNotExist("Couldn't find an instance of '%s' which matched '%s'." % (self._meta.object_class.__name__, stringified_kwargs))
                elif len(object_list) > 1:
                    raise MultipleObjectsReturned("More than '%s' matched '%s'." % (self._meta.object_class.__name__, stringified_kwargs))

                return object_list[0]
            except ValueError:
                raise NotFound("Invalid resource lookup data provided (mismatched type).")

6
задан dwarfy 17 October 2011 в 18:07
поделиться