django - Django 使用字段约束更新模型表单
问题描述
具有以下模型:
class Book(models.Model):
name = models.CharField()
author = models.CharField()
date = models.DateField()
class Meta:
unique_together = ('name', 'author')
class BookSerializerWrite(serializers.ModelSerializer):
class Meta:
model = Book
class BookView(ApiView):
def put(self, request, *args, **kwargs):
serializer = BookSerializerWrite(data=request.data)
if serializer.is_valid():
serializer.save()
上面的视图不能按原样serializer.is_valid()
工作False
。消息是:
'The fields name, author must make a unique set'
这是模型的约束。
如何更新模型?
我宁愿不覆盖序列化程序的验证方法。
我也无法访问validated_data
更新,如
https://www.django-rest-framework.org/api-guide/serializers/#saving-instances
因为这是空的,因为表单没有验证。有内置的解决方案吗?
解决方案
您可以使用它来实现它UpdateAPIview
序列化程序.py
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ('name', 'author', 'date')
视图.py
from rest_framework.generics import UpdateAPIview
from .serializers import BookSerializer
class BookUpdateView(UpdateAPIView):
serializer_class = BookSerializer
网址.py
from django.urls import path
from . import views
url_patterns = [
path('api/book/<int:pk>/update/', views.BookUpdateView.as_view(), name="book_update"),
]
现在,将您的数据发布到上面的网址。它应该工作。
参考:https ://github.com/encode/django-rest-framework/blob/master/rest_framework/generics.py
推荐阅读
- machine-learning - RapidMiner 数据挖掘逻辑回归一标签
- javascript - 无法导航到离子 4 中的页面
- mysql - MySQL 建模任务
- c++ - C++:无法使用“=”运算符更改 std::pair 的值
- python - 将nc文件转换为csv文件时如何解决“非法字节序列”问题?
- python - 有没有办法可以在我的 Windows 机器上安装枕头?
- laravel - 运行迁移命令后 Laravel 迁移错误
- azure-cosmosdb - Cosmos db 获取每个分区键的一条记录
- javascript - 如何使用 JQuery 获取 HTML 表中的所有值
- javascript - 如何在服务器端设置闪亮的小部件 css?