Python 如何在Django admin中测试重写的函数?
我已覆盖Python 如何在Django admin中测试重写的函数?,python,django,django-admin,python-unittest,django-unittest,Python,Django,Django Admin,Python Unittest,Django Unittest,我已覆盖管理模块中的函数 @admin.register(Donation) class DonationAdmin(admin.ModelAdmin): def log_change(self, request, object, message): log_obj = super().log_change(request, object, message) name_map = {name: value.label for name, value
管理
模块中的函数
@admin.register(Donation)
class DonationAdmin(admin.ModelAdmin):
def log_change(self, request, object, message):
log_obj = super().log_change(request, object, message)
name_map = {name: value.label for name, value
in DonationForm.base_fields.items()}
extended_log = ''
if message:
changed_fields = message[0].get('changed').get('fields')
extended_log = {key: value for key, value in request.POST.items()
if key in changed_fields}
extended_log = self.get_humanize_values(extended_log)
extended_log = dict(
zip(
map(lambda x: name_map[x], extended_log.keys()),
extended_log.values()
)
)
return AdditionalLogEntry.objects.create(
entry=log_obj, extended_log=extended_log)
我如何测试它
class DonationAdminTestCase(TestCase):
def setUp(self) -> None:
self.user = UserFactory()
self.donation = DonationFactory()
self.donation_admin = DonationAdmin(model=Donation, admin_site=AdminSite())
def test_log_change(self) -> None:
self.user.is_staff = True
self.user.save()
self.client.force_login(self.user)
# ???
我会在change视图本身上发表一篇文章,这将触发对更改的日志记录
change_url = reverse('admin:myapp_donation_change', args=(self.donation.id,))
data = {...} # dictionary with all the data required to make a successful change
self.client.post(change_url, data=data)
self.assertEqual(1, AdditionalLogEntry.objects.count())
...
我会发布到变更视图本身,对一个对象进行变更,然后测试是否有额外的日志条目。谢谢。我明白你的意思。一个有趣的解决方案。告诉我,
data
dict应该是什么样子来启动log\u change
调用?例如,表捐赠
有一列注释
(CharField
),我想对其进行更改。它需要包含捐赠
对象上可以更改且是必需的所有字段,但基本上您希望它包含表单的所有字段。最简单的方法是在浏览器中实际进行更改,并在浏览器开发工具(网络选项卡)中查看POST数据<代码>{'note':'some_string'}将是其中的一部分,但如果需要其他字段,则表单将不会验证,因此不会进行任何更改(并且不会进行日志更改()
)。