Django Rest Framework使用自定义URL获取请求

时间:2016-12-20 11:40:33

标签: python django django-models django-views django-rest-framework

我只想尝试用我的字段获取请求。但在这个获取请求中,我不想使用pk。我只想使用Barcode,您可以在下面看到模型。

我也是Django的新成员:

Warning: Attempt to present <UIActivityViewController: 0x141b60f70> on <Xamarin_Forms_Platform_iOS_ModalWrapper: 0x1419a0920> whose view is not in the window hierarchy!

这也是我的网址。

class Product(models.Model):
    name = models.CharField(max_length=255)
    price = models.CharField(max_length=255,null=True)
    barcode = models.BigIntegerField(unique=True, validators=[MaxValueValidator(13)])
    cover_photo = models.ImageField(upload_to='images/', blank=True, null=True)
    description = models.CharField(max_length=255,null=True)
    product_url = models.CharField(max_length=255,null=True)
    product_company = models.ForeignKey(Company, blank=True, null=True)

    fields = ['barcode', 'name', 'cover_photo', 'product_url', 'price']
    def __unicode__(self):
        return self.name.encode('utf-8')

这是我的观点。

 url(r'^api/products/(?P<barcode>)/$',product_detail, name="product_detail"),
product_detail = views.ProductViewSet.as_view({
    'get': 'retrieve'
})

1 个答案:

答案 0 :(得分:0)

尝试在lookup_field = 'barcode'中设置ProductViewSet,即

class ProductViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer
    lookup_field = 'barcode'

并在网址中设置正则表达式模式(注意[0-9]{1,13},它将匹配其长度在1到13之间的任何数字):

url(r'^api/products/(?P<barcode>[0-9]{1,13})/$',product_detail, name="product_detail")

also checkout code for class GenericAPIView