这是我的第一个Django项目。在我的admin.py文件中,我定义了字段和search_fields。我想知道如何编写测试用例来验证这些。
代码段:
class CategoryAdmin(admin.ModelAdmin):
fields = ['name']
search_fields = ['name']
是否需要为这些事情提供单元测试用例?
答案 0 :(得分:0)
我常常在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})
简而言之,这会循环遍历所有模型/字段名称组合,并决定任何给定的“fieldname”如果可以在Model类,相应的ModelAdmin类中找到,或者是更复杂的字符串,如“foo__auth_user__first_name” “这可以作为一个过滤器。该代码删除有时以search_fields为前缀的“^”字符。
既然你的问题已经过时了,你最终找到了自己的解决方案吗?如果是这样,它是什么?