DjangoRestframwork项目:
引入的module有:rest_framework、django_filters
models:
class Asset(models.Model):
asset_name = models.CharField("资产名称", max_length=256)
asset_type = models.CharField("资产类型", max_length=256)
asset_number = models.PositiveIntegerField("资产数量")
asset_owner = models.CharField("资产拥有者", max_length=256)
asset_comment = models.TextField("备注", max_length=1027)
create_time = models.DateTimeField("创建时间", auto_now_add=True, help_text="创建时间")
update_time = models.DateTimeField("更新时间", auto_now=True, help_text="更新时间")
class Meta:
# 数据库中生成的表名称 默认 app名称+下划线+类名
db_table = "asset"
# admin中显示的表名称
verbose_name = "Asset"
# verrbos_name加s
verbose_name_plural = "Assets"
# # 指定默认按什么字段排序
# ordering
# - ordering =
def __str__(self):
return self.asset_name
过滤器:
from django_filters import rest_framework as filters
from .models import Asset
class AssetFilter(filters.FilterSet):
asset_name = filters.CharFilter(field_name="asset_name", lookup_expr="icontains", label="资产名称")
asset_type = filters.CharFilter(field_name="asset_type", lookup_expr="icontains", label="资产类型")
class Meta:
model = Asset # 模型名
fields = ["asset_name", "asset_type"] # 可以使用的过滤字段
views:
class AssetView(viewsets.ModelViewSet):
queryset = Asset.objects.all().order_by('-create_time')
serializer_class = AssetSerializers
filter_backends = (DjangoFilterBackend,)
filterset_class = AssetFilter
遇到的问题:
update接口更新时,需要匹配上id, asset_name, asset_type才能更新,这样导致asset_name, asset_type无法更新,为什么更新的时候也需要匹配asset_name, asset_type?
数据库字段值:
匹配上id, asset_name, asset_type,其他字段可修改成功
修改asset_name, asset_type字段,无法修改成功,提示NotFound
检查路由写的对不对
前端直接调用没有问题,通过coreapi的接口文档调用有问题,重复调用导致
实际调用没有问题,可能是使用这个接口文档页面导致的(coreapi)
– smartsmile 2年前