亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

IntegrityError: UNIQUE constraint failed,如何捕捉和響應

IntegrityError: UNIQUE constraint failed,如何捕捉和響應

一只名叫tom的貓 2022-11-29 15:18:08
我正在使用我不熟悉的 Django REST 框架制作市場應用程序。我寫了一個測試來測試 unique together 字段。它按我想要的方式工作,當字段 author 和 target 不是唯一在一起時引發 UNIQUE constraint failed 錯誤,但我的問題是我應該如何處理這個錯誤以便我的測試通過。models.pyclass Review(models.Model):    FEEDBACK_CHOICES = [        ('POSITIVE', 'positive'),        ('NEUTRAL', 'neutral'),        ('NEGATIVE', 'negative')    ]    feedback = models.CharField(        max_length=8,        choices=FEEDBACK_CHOICES,        default='NEGATIVE'    )    review = models.TextField(max_length=200)    target = models.ForeignKey(        settings.AUTH_USER_MODEL,        related_name='reviews',        on_delete=models.CASCADE    )    author = models.ForeignKey(        settings.AUTH_USER_MODEL,        related_name='given_reviews',        on_delete=models.CASCADE    )    created = models.DateTimeField(auto_now_add=True)    class Meta:        ordering = ['created']        unique_together = ['author', 'target']serializers.pyclass ReviewSerializer(serializers.ModelSerializer):    target = serializers.PrimaryKeyRelatedField(        queryset=User.objects.all()    )    author = serializers.ReadOnlyField(source='author.id')    class Meta:        model = Review        fields = [            'id',            'feedback',            'review',            'target',            'author',            'created'        ]views.pyclass ReviewViewSet(viewsets.ModelViewSet):    queryset = Review.objects.all()    serializer_class = ReviewSerializer    permission_classes = [        ReviewPermissions    ]    def perform_create(self, serializer):        serializer.save(author=self.request.user)
查看完整描述

1 回答

?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

這在文檔中有描述:


如果只給出了 expected_exception 和 expected_message 參數,則返回一個上下文管理器,以便被測試的代碼可以內聯而不是作為函數編寫:


with self.assertRaisesMessage(ValueError, 'invalid literal for int()'):

    int('a')

但這是針對模型級別的測試。


如果您使用 DRF 的測試客戶端,您應該檢查 200 以外的響應狀態并覆蓋handle_exceptionApiView 中的異常處理程序或相關方法,以便您可以確定原因并在響應中提供使其可測試的數據。然后,您可以像使用Django 的 Test Client一樣檢查客戶端的響應。


例如,您可以像這樣返回一個 json 響應:


{

    success: false,

    code: INTEGRITY_UNIQUE_ERROR,

    message: this could contain details you could test for, like field names

}


查看完整回答
反對 回復 2022-11-29
  • 1 回答
  • 0 關注
  • 407 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號