【发布时间】:2020-03-18 10:45:21
【问题描述】:
我正在搜索我的产品价格跟踪应用,并且有 2 种型号的产品和扫描
class products(models.Model):
enter code hereproduct_id = models.IntegerField(primary_key=True)
product_name = models.CharField(max_length=100)
product_link = models.CharField(max_length=255)
image_link = models.CharField(max_length=100)
store_name = models.CharField(max_length=100)
class Meta:
verbose_name_plural = "products"
def __str__(self):
return str(self.product_name)
class scans(models.Model):
scan_id = models.IntegerField(primary_key=True)
prod_id = models.IntegerField(models.ForeignKey("scrape.Model", on_delete=models.CASCADE))
price = models.IntegerField()
scanned_time = models.DateTimeField(default=timezone.now)
class Meta:
verbose_name_plural = "scans"
def __repr__(self):
return str(self.prod_id)
搜索应该采用名称(字符串)输入并在同一个表中查询商店名称,并在另一个表中查询价格并返回带有产品名称、商店名称和价格的查询集。
我试过了
class searchResults(ListView):
model = 'products', 'scans'
template_name = 'result.html'
# let query = GET request from form (in home.html)
def get_queryset(self):
queryset = []
rawquery = self.request.GET.get('q')
queries = rawquery.split(" ")
for q in queries:
prodresults = products.objects.filter(
Q(product_name__icontains=q)
).distinct()
for prodresult in prodresults:
prod_id = products.objects.get(product_name=prodresult).product_id
prod_price = scans.objects.get(prod_id=prod_id).price
for result in prodresults:
#joins results toegther
queryset.append(result)
queryset.append(prod_price)
return list(set(queryset))
代码崩溃了
prod_price = scans.objects.get(prod_id=prod_id).price
scans matching query does not exist.
【问题讨论】:
-
你从
self.request.GET.get('q')得到什么? -
首先请修正你的代码 sn-p 缩进。
-
我真的不明白你在做什么:
prodresult(在你的 for 循环中)是一个productsinstance,而不是 name 的产品,所以products.objects.get(product_name=prodresult)不能工作。它应该已经在这里崩溃了。另外,IntegerField(ForeignKey('scrape.Model))` 应该是什么?这与产品有什么关系?为什么不使用ForeignKey('products')? -
你应该可以做到
scans.objects.get(prod_id=prodresult)但这是假设prod_id是ForeignKey到products,而不是奇怪的IntegerField。
标签: python django django-models