繁体   English   中英

Django Admin.py操作的单元测试用例

[英]Unit Test Cases for Django Admin.py operations

这是我的第一个Django项目。 在我的admin.py文件中,我定义了字段和search_fields。 我想知道如何编写测试用例来验证它们。

程式码片段:

class CategoryAdmin(admin.ModelAdmin):
    fields = ['name']
    search_fields = ['name']

这些东西是否需要单元测试用例?

我经常弄乱search_fields,list_display等中的名称。我将以下测试用例放在一起,作为我的第一个验证尝试。 当我在寻找Stack Overflow以获得更好或更完整的解决方案时遇到了您的问题,并且由于您的问题没有任何答案,所以我不妨将代码放到这里。

model_classnames = ['MyModelX', 'MyModelY', 'MyModelZ']

admin_fieldname_lists = ['list_display', 'search_fields']

class TestAdminConfig(TestCase):

    def test_admin_fieldname_lists(self):
        for model_classname in model_classnames:
            model_class = locate("tasks.models.%s" % model_classname)
            admin_class = locate("tasks.admin.%sAdmin" % model_classname)
            #print("classes: %s, %s" % (model_class.__name__, admin_class.__name__))
            for list_name in admin_fieldname_lists:
                #print("    list: %s" % list_name)
                for fieldname in getattr(admin_class, list_name):
                    fieldname = fieldname.replace("^", "")
                    #print("       field: %s" % fieldname)
                    if fieldname in dir(model_class): continue
                    if fieldname in dir(admin_class): continue
                    model_class.objects.filter(**{fieldname:None})

简而言之,这会遍历所有模型/字段名称组合,并确定是否可以在Model类,相应的ModelAdmin类上找到任何给定的“ fieldname”,或者是更复杂的字符串(如“ foo__auth_user__first_name”)起作用作为过滤器。 该代码删除了有时会在search_fields前面加上前缀的“ ^”字符。

由于您的问题很旧,您最终找到了自己的解决方案吗? 如果这样,那是什么?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM