Как получить экземпляры класса с некоторыми определенными условиями?

У меня есть модель Order, из которой я хочу получить все данные в поле "ref_code", но затем я хочу отфильтровать их по элементу. То есть, по сути, я хочу получить все ref_code конкретного items (которое также является полем по manytomany). Я не знаю, как настроить его, чтобы он работал. Пока что я могу получить только все ref_code.

Любая помощь будет оценена по достоинству.

Модель:

class Order(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                             on_delete=models.CASCADE)
    ref_code = models.CharField(max_length=20, blank=True, null=True)
    items = models.ManyToManyField(eOrderItem)
    item = models.ForeignKey(
        'blog.Post', on_delete=models.CASCADE, blank=True, null=True)
    start_date = models.DateTimeField(auto_now_add=True)
    ordered_date = models.DateTimeField()
    ordered = models.BooleanField(default=False)
    shipping_address = models.ForeignKey(
        'Address', related_name='shipping_address', on_delete=models.SET_NULL, blank=True, null=True)
    billing_address = models.ForeignKey(
        'Address', related_name='billing_address', on_delete=models.SET_NULL, blank=True, null=True)
    payment = models.ForeignKey(
        'Payment', on_delete=models.SET_NULL, blank=True, null=True)
    coupon = models.ForeignKey(
        'Coupon', on_delete=models.SET_NULL, blank=True, null=True)
    being_delivered = models.BooleanField(default=False)
    received = models.BooleanField(default=False)
    refund_requested = models.BooleanField(default=False)
    refund_granted = models.BooleanField(default=False)
    transaction_id = models.CharField(max_length=200, null=True, blank=True)
    qr_code = models.ImageField(upload_to='qrcode', blank=True)


    def __str__(self):
        return self.user.username

    def save(self, *args, **kwargs):
        qrcode_img = qrcode.make(self.ref_code)
        canvas = Image.new('RGB', (290, 290), 'white')
        draw = ImageDraw.Draw(canvas)
        canvas.paste(qrcode_img)
        fname = f'qr_code-{self.ref_code}.png'
        buffer = BytesIO()
        canvas.save(buffer, 'PNG')
        self.qr_code.save(fname, File(buffer), save=False)
        canvas.close()
        super().save(*args, **kwargs)

    def get_total(self):
        total = 0
        for order_item in self.items.all():
            total += order_item.get_final_price()
        if self.coupon:
            total -= self.coupon.amount
        return total

Вид:

class RefCodesList(APIView):
    serializers_class = OrderRefSerializer

    def get(self, request, *args, **kwargs):
        slug = request.data.get('slug', None)
        item = get_object_or_404(Post, slug=slug)


        p = Order.objects.all().values_list('ref_code', flat=True)
 
        return Response(p, status=HTTP_200_OK)

Сериализаторы:

class OrderRefSerializer(serializers.ModelSerializer):
    class Meta:
        model = Order
        fields = '__all__'

Спасибо.

Вернуться на верх