首页 新闻 会员 周边 捐助

DjangoRestramwork项目django_filters过滤与更新遇到的问题

0
悬赏园豆:100 [待解决问题]

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

smartsmile的主页 smartsmile | 初学一级 | 园豆:104
提问于:2022-04-14 11:09

实际调用没有问题,可能是使用这个接口文档页面导致的(coreapi)

smartsmile 2年前
< >
分享
所有回答(2)
0

检查路由写的对不对

言良 | 园豆:202 (菜鸟二级) | 2022-04-14 23:51
0

前端直接调用没有问题,通过coreapi的接口文档调用有问题,重复调用导致

smartsmile | 园豆:104 (初学一级) | 2022-05-09 09:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册