簡體   English   中英

如何根據產品領域篩選 django 型號?

[英]How do I filter django models based on product fields?

我正在嘗試使用相關字段運行過濾器命令; 並且不確定如何向 go 詢問:

class Listing(models.Model):
    name = models.CharField(max_length=150)
    slug = models.SlugField()
    description = models.TextField()
    catchphrase = models.TextField(null=True, blank=True)
    picture_0 = models.ImageField(upload_to = "mainimages")
    picture_1 = models.ImageField(null=True, blank=True, upload_to = "./product/static/product/imgs")
    picture_2 = models.ImageField(null=True, blank=True, upload_to = "./product/static/product/imgs")
    short_term_price = models.IntegerField(default=0)
    long_term_price = models.IntegerField(default=0)
    tax = models.IntegerField(default=0)
    tag = models.ForeignKey('Tag', on_delete=models.PROTECT)

    def __str__(self):
        return self.name

class Order(models.Model):
    listing = models.ForeignKey(Listing, on_delete=models.PROTECT)
    customer = models.ForeignKey(Customer, on_delete=models.PROTECT)
    lease_date = models.DateField()
    clear_date = models.DateField()
    price = models.IntegerField(default=0) #cents

    def __str__(self):
        return self.listing.name
    
    def get_display_price(self):
        return "{0:.2f}".format(self.price / 100)

一般的想法是,用戶提供開始日期和結束日期,而 Django 僅返回在該時間范圍內不在訂單中的列表。 我不確定如何 go 關於視圖 function:

def search_products(request, start_date, end_date):
    listing = Listing.objects.select_related('order').all()

我將提供一個答案,就好像您正在使用lease_date進行過濾一樣。 有幾種方法可以實現這一點。 一個是:

listing_qs = Listing.objects.filter(
pk__in=Order.objects.exclude(lease_date__range(start_date,end_date)).select_related('listing').values_list('listing__pk')
)

代碼分解:

  • 通過排除租賃日期在提供的時間范圍內的訂單來檢索訂單
  • 選擇列表的 pk(通過values('listing__pk') )你可以 select 你想要的任何其他屬性
  • 因為我們有 pk 列表,所以使用前面 2 條指令的結果來獲取Listing對象。

另一種方法:只排除所有租賃日期在提供的時間范圍內的清單對象

Listing.objects.exclude(order_set__lease_date__range=(start_date,end_date))

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM