Django的文档说明了it('should find a non-name-spaced component as a variable', () => {
expect(modal.find(OtherComponent)).toHaveLength(1); // passes
});
it('should find a non-name-spaced component as a string', () => {
expect(modal.find('OtherComponent')).toHaveLength(1); // passes
});
it('should find a name-spaced component as a variable', () => {
expect(modal.find(Modal.Heading)).toHaveLength(1); // passes
});
it('should (not) find a name-spaced component as a string', () => {
expect(modal.find('Modal.Heading')).toHaveLength(1); // fails
});
和例外:
https://docs.djangoproject.com/en/1.10/topics/db/transactions/#django.db.transaction.atomic
避免在原子内捕获异常!
...
捕获数据库错误的正确方法是围绕原子块,如上所示。如有必要,为此目的添加额外的原子块。此模式具有另一个优点:它可以明确地分隔在发生异常时将回滚哪些操作。
...
"如果需要,为此目的添加额外的原子块。"看起来像?我可以这样做,或者这会导致"意外行为"?
transaction.atomic()
他们是否意味着这样写?如果是这样,为什么会有所不同?
valid = True
errors = []
objects = MyModel.objects.all()
try:
with transaction.atomic():
for obj in objects:
try:
# Update and save obj here...
except:
errors.append("obj {} had errors".format(obj.pk))
valid = False
if not valid:
raise Exception('batch update failed.')
except Exception as ex:
# Handle it..
答案 0 :(得分:1)
Django仅在事务块捕获DatabaseError
(或其子类)时触发回滚,因此您不应该在它之前捕获它。如果添加第二个事务块(第二个示例),则会捕获错误,将事务标记为回滚,然后您可以执行任何操作。
我认为你应该很好,你重新提出完全相同的错误,但这只是猜测。