Ваши модели на самом деле не определены правильно с точки зрения именования, кодирования и Django соглашений. Вы должны изменить их на это:
class Product(models.Model): # Capital P, singular
id = models.IntegerField(primary_key=True) # id, not product_id
name = models.CharField(max_length=100) # name, not product_name
link = models.CharField(max_length=255)
image_link = models.CharField(max_length=100)
store_name = models.CharField(max_length=100)
# ...
class Scan(models.Model):
id = models.IntegerField(primary_key=True)
product = models.ForeignKey("Product", on_delete=models.CASCADE, related_name="scans") # FK to Product
price = models.IntegerField()
scanned_time = models.DateTimeField(default=timezone.now)
# ...
Затем, когда у вас есть набор запросов продуктов:
results = Product.objects.filter(product_name__icontains=q).distinct()
, вы можете через них l oop и получить соответствующие сканы:
for product in results:
scans = Scan.objects.filter(product=product) # You can have more than one Scan for the same product, since this is a one-to-many relationship!
Лучше, вы можете сделать все это одним запросом:
scans = Scan.objects.filter(product__in=Product.objects.filter(
product_name__icontains=q))