小编nno*_*nov的帖子

为什么python模拟补丁不起作用?

我有两个文件

spike.py

class T1(object):
    def foo(self, afd):
        return "foo"

    def get_foo(self):
        return self.foo(1)


def bar():
    return "bar"
Run Code Online (Sandbox Code Playgroud)

test_spike.py:

from unittest import TestCase
import unittest
from mock import patch, MagicMock
from spike import T1, bar


class TestStuff(TestCase):
    @patch('spike.T1.foo', MagicMock(return_value='patched'))
    def test_foo(self):
        foo = T1().get_foo()
        self.assertEqual('patched', foo)

    @patch('spike.bar')
    def test_bar(self, mock_obj):
        mock_obj.return_value = 'patched'
        bar = bar()
        self.assertEqual('patched', bar)


if __name__ == "__main__":
    unittest.main()
Run Code Online (Sandbox Code Playgroud)

当我运行时python test_spike.py,第一个测试用例会通过,但第二个测试用例会失败.然后我切换到使用nosetests test_spike.py,然后两个都失败了.

我不明白这是怎么发生的?这些案件应该通过所有.

python unit-testing mocking nose

20
推荐指数
3
解决办法
3万
查看次数

django-rest-framework,多表模型继承,ModelSerializers和嵌套序列化程序

我无法在文档或互联网上找到此信息.
最新的django-rest-framework,django 1.6.5

如何创建一个可以处理嵌套序列化器的ModelSerializer,其中嵌套模型是使用多重继承实现的?

例如

######## MODELS
class OtherModel(models.Model):
    stuff = models.CharField(max_length=255)

class MyBaseModel(models.Model):
    whaddup = models.CharField(max_length=255)
    other_model = models.ForeignKey(OtherModel)

class ModelA(MyBaseModel):
    attr_a = models.CharField(max_length=255)

class ModelB(MyBaseModel):
    attr_b = models.CharField(max_length=255)


####### SERIALIZERS
class MyBaseModelSerializer(serializers.ModelSerializer):
    class Meta:
        model=MyBaseModel

class OtherModelSerializer(serializer.ModelSerializer):
    mybasemodel_set = MyBaseModelSerializer(many=True)

    class Meta:
        model = OtherModel
Run Code Online (Sandbox Code Playgroud)

这显然不起作用,但说明了我在这里要做的事情.
在OtherModelSerializer中,我希望mybasemodel_set根据我们拥有的内容序列化ModelA或ModelB的特定表示.

如果它很重要,我也使用django.model_utils和inheritencemanager,所以我可以检索一个查询集,其中每个实例已经是适当的子类的实例.

谢谢

python django django-models django-rest-framework

14
推荐指数
2
解决办法
7187
查看次数

从django-rest-framework返回CSV格式?

我有一个工作的Django 1.8站点,我想使用django-rest-framework添加一个RESTful API。我想支持以CSV和JSON格式进行渲染,并且对如何做到这一点感到困惑。

在api/urls.py我有这个:

from django.conf.urls import url, include
from rest_framework import routers
from rest_framework.urlpatterns import format_suffix_patterns
import views

router = routers.DefaultRouter()
urlpatterns = [
  url(r'^organisation/$', views.organisation), 
]
urlpatterns = format_suffix_patterns(urlpatterns,
                                 allowed=['json', 'csv'])
Run Code Online (Sandbox Code Playgroud)

我在api/views.py:

class JSONResponse(HttpResponse):
    """
    An HttpResponse that renders its content into JSON.
    """
    def __init__(self, data, **kwargs):
        content = JSONRenderer().render(data)
        kwargs['content_type'] = 'application/json'
        super(JSONResponse, self).__init__(content, **kwargs)

@api_view(['GET'])
def organisation(request, format=None):
    code = request.query_params.get('code', None)
    print 'format', format
    organisation = Organisation.objects.get(code=code)
    serializer = OrgSerializer(organisation) …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

6
推荐指数
3
解决办法
6797
查看次数

如何在 for 循环中排除查询集中的项目?

我想删除

results = Model.objects.filter(condition - satisfied... etc.)
Run Code Online (Sandbox Code Playgroud)

然后我遍历查询集并在我浏览代码时删除每个对象:

for a in results:

### code ###

    results.exclude(id=a.id)
Run Code Online (Sandbox Code Playgroud)

无论我如何排除,结果对象都不会改变。当我遍历查询集时,有没有办法“弹出”它们?

django django-models django-queryset

2
推荐指数
1
解决办法
1835
查看次数