django - Django UpdateView 测试时不保存新数据
问题描述
当我在正在运行的服务器上使用我的应用程序来更新现有条目时,它可以工作,但是当我运行测试时它会创建条目,发布它但不会更新字段标题和作者,所以我得到一个断言错误。当我比较正在运行的应用程序更新的打印和测试时,我没有注意到任何差异。
型号:
class Book(models.Model):
title = models.CharField(max_length=120)
author = models.CharField(max_length=100)
published = models.IntegerField(validators=[MaxValueValidator(datetime.date.today().year)],
help_text="Use the following format: YYYY")
isbn_10 = models.CharField(max_length=10, null=True, verbose_name='ISBN_10')
isbn_13 = models.CharField(max_length=13, null=True, verbose_name='ISBN_13')
cover_uri = models.CharField(max_length=200)
language = models.CharField(max_length=56)
slug = models.SlugField(max_length=120, unique=True, blank=True)
测试:
def test_update_book(self):
"""Create book object and updates fields with correct data"""
book = Book.objects.create(title='Camera Work 1',
author='Alfred Stieglitz',
published='2008',
isbn_10='',
isbn_13='9788389192868',
cover_uri='image.jpg',
language='english')
response = self.client.post(
reverse('books-update', kwargs={'slug': book.slug}),
{'title': 'The Catcher in the Rye',
'author': 'J.D. Salinger',
'published': '2008',
'isbn_10': '',
'isbn_13': '9788389192868',
'cover_uri': 'image.jpg',
'language': 'english'})
self.assertEqual(response.status_code, 200)
book.refresh_from_db()
print('BOOK', book)
self.assertEqual(book.author, 'J.D. Salinger')
网址模式:
urlpatterns = [
path('update/<str:slug>', BookUpdateView.as_view(), name='books-update'),
]
并查看:
class BookUpdateView(UpdateView):
model = Book
fields = '__all__'
success_url = '/'
template_name = 'books/book_update.html'
def post(self, request, *args, **kwargs):
print('POST', request.POST, kwargs)
return super().post(request, *args, **kwargs)
当我使用我的模板更新该条目时,它可以工作,但是当我运行测试时,它会创建条目,发布它但不更新字段title
,author
所以我得到
一个错误:
AssertionError: 'Alfred Stieglitz' != 'J.D. Salinger'
- Alfred Stieglitz
+ J.D. Salinger
这是测试的打印件
POST <QueryDict: {'title': ['The Catcher in the Rye'], 'author': ['J.D. Salinger'],
'published': ['2008'], 'isbn_10': [''], 'isbn_13': ['9788389192868'], 'cover_uri':
['image.jpg'], 'language': ['english']}> {'slug': 'camera-work-1'}
BOOK Camera Work 1, Alfred Stieglitz, 2008
解决方案
推荐阅读
- r - 计算增长增长,按类型分组(使用 R)
- reactjs - 反应本机错误:npm ERR!无法从根项目解析依赖 metro-react-native-babel-preset@"^0.59.0"
- sql - 按小时拆分日期/时间数据并将日期/时间范围扩展到行
- highcharts - HIGHCHARTS:导出事件无法访问 x 轴标签
- html - 在下拉选择中配置 HTML 正文
- wpf - 如何将 DataGrid 排序事件绑定到 Prism ViewModel DelegateCommand
- java - 如何从 Libgdx 中的 iOS 模块访问 Assets 文件夹中的文件?
- omnet++ - 如何更改静脉中的数据速率?
- javascript - 为什么我需要 2 个 requestAnimationFrame 调用来等待渲染的 dom
- xml - 如何使用 XML Annotation 可视化数据集并将其用于 YOLOv5