标签: tastypie

如何在django-tastypie中包含非直接(通过另一个资源)的反向关系?

我有3个型号.游戏,玩家和作品.玩家附加到游戏上并且玩家附加到玩家.关系是简单的外键.

在检索游戏时,我还希望从所有玩家中检索所有棋子并将其包含在结果中.

class GameResource(ModelResource):
    class Meta:
        queryset = Game.objects.all()
        resource_name = 'game'
        allowed_methods = ['get']

class PlayerResource(ModelResource):
    game = fields.ForeignKey(GameResource, 'game')
    class Meta:
        queryset = Player.objects.all()
        resource_name = 'player'
        allowed_methods = ['get']

class PieceResource(ModelResource):
    player = fields.ForeignKey(PlayerResource, 'player')
    class Meta:
        queryset = Piece.objects.all()
        resource_name = 'piece'
        allowed_methods = ['get']
Run Code Online (Sandbox Code Playgroud)

我不知道这是怎么做到的.我最初改变了脱水,以便它只是做正确的查询,调用django serialize,并将它放在bundle中的一个新变量中.这对我来说似乎是一个躲闪.查询集的序列化也被tastypie再次序列化,导致它转义引号字符(urgh).

api django tastypie

5
推荐指数
1
解决办法
1101
查看次数

将过滤器组合到Tastypie中的一个查询中

可能重复:
Django Tastypie高级过滤:如何使用Q对象进行复杂查找

我有一个tastypie modelRseource,看起来像这样:

class TaggedResource(ModelResource):
    tags = ListField()
    user = fields.ForeignKey(UserProfileResource, 'user')

    class Meta:
        queryset = Media.objects.all().order_by('-timestamp')
        authorization = MediaAuthorization()
        detail_allowed_methods = ['get', 'post', 'put', 'delete','patch']

    filtering = {
        #'user': ALL_WITH_RELATIONS,
        #exact is date, lt is less than lte less than equal to, etc
        'timestamp': ['exact', 'range', 'lt', 'lte', 'gte', 'gt'],
        'social_source': ALL,
        'media_type': ALL,
        'comment': ['exact', 'startswith', 'endswith', 'contains'],
        'media_text': ['exact', 'startswith', 'endswith', 'contains'],
    }
Run Code Online (Sandbox Code Playgroud)

我需要在过滤器之间使用OR运算符,并且希望将查询合并到一个参数中.例如,我想从注释字段OR media_text字段返回包含单词"test"过滤的对象.

这将是理想的:http:mysite.com/api/v1/tagged?q = test

其中'q'对两个字段执行OR过滤.

这可行吗?

更新:这是我正在使用的高级过滤器,但我不确定如何获得一个OR语句:

def build_filters(self, filters=None):
    if …
Run Code Online (Sandbox Code Playgroud)

django tastypie

5
推荐指数
1
解决办法
5572
查看次数

Tastypie从继承的模型访问字段

是否可以使用tastypie在相关模型上包含字段?

根据我的模型如下:如果我将一个VideoContent和一个TextContent实例持久保存到数据库,那么我可以从我的内容资源中获取2个对象,但是没有其他字段可用.

是否可以包含相关模型中的字段(在这个例子中,视频网址和文本内容),并且将来可以满足添加更多内容类型的需要,而无需重写内容资源,或者我是从方向错误?

目标是能够使用更多ContentTypes扩展它,而无需更改Content资源(假设它可以在第一时间使其工作)

Models.py:

class Content(models.Model):
    parent = models.ForeignKey('Content', related_name='children', null=True, blank=True)

class TextContent(Content):
    text = models.CharField(max_length=100)

class VideoContent(Content):
    url = models.CharField(max_length=1000)
Run Code Online (Sandbox Code Playgroud)

然后我的资源:

class ContentResource(ModelResource):
    children = fields.ToManyField('myapp.api.resources.ContentResource', 'children', null=True, full=True)

    class Meta:
        resource_name = 'content'
        queryset = ContentResource.objects.all()
        authorization = Authorization()
        always_return_data = True
Run Code Online (Sandbox Code Playgroud)

django tastypie

5
推荐指数
1
解决办法
947
查看次数

从tastypie uri获取模型对象?

你如何从它的uri获得tastypie模型资源的模型对象?

例如:

如果在python中将uri作为字符串给出,那么如何获得该字符串的模型对象?

python django tastypie

5
推荐指数
1
解决办法
3478
查看次数

在tastypie和obj_create错误中反向关系"ToManyField"

我在添加资源方面遇到了一些问题,由ApiKey用户关联,问题恰恰是"出租车"字段,当我评论时,"create_object"工作正常.有资源

Resouces

class LocationResource(ModelResource):
    user = fields.ForeignKey(AccountResource, 'user', full=True)
    taxi = fields.ToManyField(TaxiResource, attribute=lambda bundle: Taxi.objects.filter(user=bundle.obj.user), full=True, null=True)

    class Meta:
        queryset = Location.objects.all().order_by('-id')
        resource_name = 'location'
        list_allowed_methods = ['post', 'get']
        authentication = ApiKeyAuthentication()
        authorization = Authorization()
        filtering = {'user': ALL_WITH_RELATIONS}

    def obj_create(self, bundle, **kwargs):
        if bundle.request.method == 'POST':
            return super(LocationResource, self).obj_create(bundle, user=bundle.request.user)
Run Code Online (Sandbox Code Playgroud)

楷模

from django.contrib.auth.models import User

class Taxi(models.Model):
    STATUS_CHOICES = (
        ('Av', 'Available'),
        ('NA', 'Not Available'),
        ('Aw', 'Away'),
    )
    user = models.OneToOneField(User)
    license_plate = models.TextField(u'Licence Plate',max_length=6,blank=True,null=True)
    status = models.CharField(u'Status',max_length=2,choices=STATUS_CHOICES)
    device …
Run Code Online (Sandbox Code Playgroud)

django tastypie

5
推荐指数
1
解决办法
999
查看次数

不调用apply_authorization_limits

我尝试在我的Django应用程序中获取有关我的身份验证用户的详细信息.

为此,我创建了一个新资源:

class MyUserResource(ModelResource):
    class Meta:
        queryset = ReaderUser.objects.all()
        resource_name = 'me'
        list_allowed_methods = []
        detail_allowed_methods = ['get']
        authorization = Authorization()
        authentication = SessionAuthentication()
        excludes = ('password', 'id', 'is_active', 'is_admin', 'last_login')

    def apply_authorization_limits(self, request, object_list):
        print request.user
        return object_list.filter(pk=request.user.pk)

    def prepend_urls(self):
        return [
            url(r"^(?P<resource_name>%s)/$" % self._meta.resource_name, self.wrap_view('dispatch_detail'), name="api_dispatch_detail"),
        ]
Run Code Online (Sandbox Code Playgroud)

当我使用API​​调用我时,/api/me/?format=json 我得到以下内容:More than one resource is found at this URI.

我也试过没有prepend_urls.我不明白的是该print语句永远不会在方法中执行apply_authorization_limits

关于我做错了什么的暗示?

api django tastypie

5
推荐指数
1
解决办法
835
查看次数

使用用户作为FK TastyPie API的模型资源

使用TastyPie我有一个拥有FK用户的模型资源.当我对API发布POST时,我必须包含这样的用户ID:

 data : JSON.stringify({ name : 'value a', user : '12' }), 
Run Code Online (Sandbox Code Playgroud)

我的用户必须通过登录或使用API​​密钥以及用户名和密码进行身份验证.在这两种情况下,我都知道用户是谁.

1)如何让用户确保user1不为user2创建资源?

2)或者完全发送用户ID是违反直觉的?我应该以某种方式从授权细节中获取用户,如果是这样的话?

python django django-models tastypie

5
推荐指数
1
解决办法
346
查看次数

在Django中使用api而不是Views

在Django中使用REST api而不是视图的主要优点是什么?

可以在REST api和Views(在一个应用程序中使用REST api,在另一个应用程序中使用Views)中混合使用吗?

或者我们是否需要为所有应用编写REST api?而不是混合REST和视图

django rest django-views tastypie

5
推荐指数
1
解决办法
855
查看次数

如何在Django日志中显示未捕获的异常

当我的Django项目中有未捕获的异常时,日志只显示一条简单的"HTTP 500"消息.HTTP响应将包含完整的堆栈跟踪作为HTML,但是当我开发Web服务未被Web浏览器使用时,这不是非常有用.如何在Django日志中显示未捕获的异常的完整堆栈跟踪?

我尝试使用"process_exception"方法安装自定义中间件,并为"got_request_exception"事件安装自定义信号处理程序,但这些处理程序都没有被调用过.

我正在使用Django 1.6.1和Tastypie 0.11.0,我正在调试模式下运行.

django logging tastypie

5
推荐指数
1
解决办法
1043
查看次数

django-rest-framework多个序列化器用于1个型号?

假设你想要放弃

{field1, field2, field3}详细请求.
{field1, field2}在列表请求上.
{field1}在其他一些更简单的列表请求.

我已经看到使用get_serializer_classself.action的示例,它可以处理详细信息与列表方案.(/sf/answers/1592895391/)

我应该定义两个视图集和两个url端点吗?
或者这里有更好的方法吗?

我想这也适用于tastypie.(两个资源?)

api django rest tastypie django-rest-framework

5
推荐指数
1
解决办法
3266
查看次数