相关疑难解决方法(0)

怎么写django测试意味着失败?

我有一个名为Thingwith called 的模型name,我希望name为char字段,只有 3个字符长.

我该怎么写测试?

class TestCase1(TestCase):
    def test1(self):
        thing = Thing(name='1234')
Run Code Online (Sandbox Code Playgroud)

那个测试应该失败.如何正确编写测试以便在该对象失败时测试通过

testing django tdd

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

使用信号时django TransactionManagementError

我与django的用户和UserInfo有一对一的字段.我想订阅用户模型上的post_save回调函数,以便我可以保存UserInfo.

@receiver(post_save, sender=User) 
def saveUserAndInfo(sender, instance, **kwargs):
    user = instance
    try:
        user.user_info.save()
    except:
        info = UserInfo()
        info.user = user
        info.save()
Run Code Online (Sandbox Code Playgroud)

但是,TransactionManagementError当我尝试这样做时,我得到了一个.我假设因为用户模型还没有完成保存,我正在尝试读取id以将其保存到user_info.谁知道如何正确地做到这一点?

第二个问题.我想在创建用户后立即将UserInfo实例附加到用户.所以在post_init上我尝试创建一个UserInfo实例并将其分配给用户实例,但它不起作用,因为尚未为用户分配pk.我假设我只需要等到post_save(或更高版本)来创建此实例.这是唯一的方法吗?

追溯:

File "/Users/croberts/.virtualenvs/lunchbox/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  114.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/croberts/.virtualenvs/lunchbox/lib/python2.7/site-packages/django/contrib/admin/options.py" in wrapper
  430.                 return self.admin_site.admin_view(view)(*args, **kwargs)
File "/Users/croberts/.virtualenvs/lunchbox/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view
  99.                     response = view_func(request, *args, **kwargs)
File "/Users/croberts/.virtualenvs/lunchbox/lib/python2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
  52.         response = view_func(request, *args, **kwargs)
File "/Users/croberts/.virtualenvs/lunchbox/lib/python2.7/site-packages/django/contrib/admin/sites.py" in inner
  198.             return view(request, *args, **kwargs)
File "/Users/croberts/.virtualenvs/lunchbox/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapper
  29.             return bound_func(*args, **kwargs) …
Run Code Online (Sandbox Code Playgroud)

python django django-models

11
推荐指数
1
解决办法
1万
查看次数

Django测试:TransactionManagementError:在"原子"块结束之前,您无法执行查询

Django新手在这里.我正在尝试为我开发的简单API实现单元测试.下面你可以找到我的测试实现工作正常:

from django.test import TestCase
from my_app.models import MyModel


class TestMyViewSet(TestCase):
    """
    Unit tests for endpoints in MyViewSet.
    """
    fixtures = ['my_app/fixtures/data.yaml']

    def setUp(self):
        # Making setup for the test case here.


    def test_post_my_resource(self):

        # Checking that fixture is loaded correctly.
        self.assertEqual(MyModel.objects.all().count(),1)

        request_body = {
            'my_resource': "input_for_my_resource"
        }

        response = self.client.post('/my_resources/', data=request_body)
        self.assertEqual(response.status_code, 201)
        # self.assertEqual(MyModel.objects.all().count(),2)
Run Code Online (Sandbox Code Playgroud)

但是,当我通过检查实例数量self.assertEqual(MyModel.objects.all().count(),2)从注释中删除最后一行以测试my_resource在相应模型上成功创建时,我收到一条错误,说明以下内容:

TransactionManagementError:当前事务中发生错误.在"原子"块结束之前,您无法执行查询.

我在这里错过了什么?

提前致谢!

PS:我遇到了以下问题:TransactionManagementError"在使用信号时你不能在'原子'块结束之前执行查询",但仅在单元测试期间但我不确定在我的情况下发生的情况是相同的.

python django unit-testing

8
推荐指数
1
解决办法
4438
查看次数

当前事务中发生错误。在“原子”块结束之前,您无法执行查询

阅读了多种解决方案来源,例如Guaravs帖子(包括评论中的所有建议)和Alexander等,但仍然无法解决问题。创建数据库条目@models.OrderItemTax.objects.create() 时出现错误

使用 django 1.11.3 和 MySQL 14.14

views.py **只有部分代码,因为该函数超过 600 行。

def checkout_cart(request):
     try:
        item_to_group_keys = []
        promo_key = 'promo:' + str(request.user.id)

        with connection.cursor() as cursor:
            with transaction.atomic():
                // more code here...
                try:
                    with transaction.atomic(): // updated solution
                        event = ''
                        group = models.Group.objects.get(id=order_item.group.id)
                        now = timezone.now()
                        event_date = now.strftime('%Y-%m-%d')

                        try:
                            event = models.Event.objects.get(group_id=group.id, date=event_date)
                            try:
                                self_attendee = models.EventAttendee.objects.get(event=event,
                                                                                    user_id=request.user.id,
                                                                                    is_attending=True)
                            except:
                                self_attendee = models.EventAttendee.objects.create(event=event,
                                                                                    user_id=request.user.id,
                                                                                    is_attending=True)
                                self_attendee.save()
                        except models.Event.DoesNotExist:
                            event = models.Event.objects.create(group_id=group.id, date=event_date, planner_id=request.user.id) …
Run Code Online (Sandbox Code Playgroud)

python mysql django

6
推荐指数
1
解决办法
6671
查看次数

标签 统计

django ×4

python ×3

django-models ×1

mysql ×1

tdd ×1

testing ×1

unit-testing ×1