如何在Django中为客户模型和订单模型创建ModelViewSet?

时间:2020-10-19 02:09:20

标签: python django django-rest-framework

所以我有一个客户模型。

class Customer(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    email = models.EmailField()
    address = models.CharField(max_length=250)
    postal_code = models.CharField(max_length=20)
    city = models.CharField(max_length=100)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ('-created',)

和一个OrderItem模型。

class OrderItem(models.Model):
    order = models.ForeignKey(Customer, on_delete=models.SET_DEFAULT, default=1)
    product = models.ForeignKey(Product, on_delete=models.SET_DEFAULT, default=1)
    quantity = models.PositiveIntegerField(default=1)
    ready = 1
    on_its_way = 2
    delivered = 3
    STATUS_CHOICES = (
        (ready, 'ready'),
        (on_its_way, 'on its way'),
        (delivered, 'delivered'),
    )
    status = models.SmallIntegerField(choices=STATUS_CHOICES)
    created = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ('-created',)

我创建了另一个模型ByCustomer Model

class ByCustomer(models.Model):
    name = models.ForeignKey(Customer, on_delete=models.CASCADE)
    orders = models.ForeignKey(OrderItem, on_delete=models.CASCADE)

我想将其转换为ModelViewSet,其中仅显示所选客户的订单。

class By_Customer_View(viewsets.ModelViewSet):
    # code let's you select only one customer
    # and returns all the Orders that customer has

我在@api_view上看到过类似的内容

 @api_view(['GET'])
 def by_customer(request, pk):
     tasks = ByCustomer.objects.get(name=pk)
     serializer = ByCustomerSerializer(tasks, many=False)
     return Response(serializer.data)

这如何与ModelViewSet一起使用?我无法在(viewsets.ModelViewSet,pk)上添加额外的参数。我还应该添加哪些其他字段?我还缺少什么?还是ModelViewSets的新手,所以我不知道它的局限性。如果ModelViewSet没有解决方案。我需要在上面的@api_view代码中进行哪些更改?谢谢。

0 个答案:

没有答案