python - TypeError:products() 为参数 'pk' 获得了多个值
问题描述
模型.py
我有两个具有多字段的模型,这让我每次都感到困惑。
class Product(models.Model):
product_name = models.CharField(max_length=32)
quantity = models.IntegerField()
remarks = models.TextField(blank=True)
class Vendor(models.Model):
vendor_name = models.CharField(max_length=50)
address = models.CharField(max_length=100)
bill_no = models.CharField(max_length=8)
product = models.ManyToManyField(Product)
序列化程序.py
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = '__all__'
class VendorSerializer(serializers.ModelSerializer):
product = ProductSerializer(many=True, read_only=False)
class Meta:
model = Vendor
fields = '__all__'
def create(self, validate_data):
product_data = validate_data.pop('product')
vendor = Vendor.objects.create(**validate_data)
for product_data in product_data:
Product.objects.create(vendor=vendor, **product_data)
return Vendor
视图.py
from rest_framework.decorators import detail_route
class VendorViewset(viewsets.ModelViewSet):
serializer_class = VendorSerializer
queryset = Vendor.objects.all()
@detail_route(methods=['GET'])
def products(request, pk=None):
qs = self.get_object().product.all()
serializer = ProductSerializer(qs, many=True)
return Response(serializer.data)
网址.py
from django.conf.urls import url, include
from . import views
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register('vendor', views.VendorViewset)
urlpatterns = [
url(r'', include(router.urls)),
]
然后我浏览http://localhost:8000/vendor/1/products/我得到了那个错误。如何解决?
解决方案
方法的第一个参数应该是self
:
@detail_route(methods=['GET'])
def products(self, request, pk=None):
qs = self.get_object().product.all()
serializer = ProductSerializer(qs, many=True)
return Response(serializer.data)
推荐阅读
- android - Android 在深色/浅色主题之间切换不起作用
- c# - 如何使用多个表(CRUD 项目).Net MVC
- c# - 使用 OpenAccess ORM 在数据库服务器端直接执行方法
- python - 使用 HTTPS 后的 Django CSRF 故障
- c# - 如何在 CarouselView 中使用 ListView?
- r - 在 ecdf ggplot2 中添加参考线
- javascript - 在 Firebase 的实时数据库中,如何将自己的参数传递给事件侦听器的回调?
- sqlite - 如何在 Flutter 中使用 Sqlite 将布尔值转换为 Int 值?
- javascript - 排序加密货币价格的问题(vue.js)
- css - 如何使伪元素跨换行符跟随文本?