Необходимо получить определенный объект внешнего ключа product из базы данных в Django

Привет всем Я новичок в Django и работаю над сайтом электронной коммерции. Я создаю модель category и передаю ее в модель shop с помощью внешнего ключа. В модели Category у меня есть категория Sale и я хочу получить все продукты, которые имеют категорию sale на моей целевой странице, а остальные на странице shop. Кто-нибудь, пожалуйста, помогите мне, как мне это сделать? Мой код model.py таков:

class category(models.Model):
   name = models.CharField(max_length=200)
   def __str__(self):
      return self.name
class shop(models.Model):
  s_id = models.AutoField(primary_key=True)
  s_name = models.CharField(max_length=50)
  s_category = models.ForeignKey(category, on_delete= models.CASCADE)
  s_artical_no = models.IntegerField(default=0)

View.py:

def index(request):
 prod = shop.objects.get(s_category = 4) 
 params = {'prod': prod}
 return render(request, "main/index.html", params )

s_category является экземпляром category, вы не можете передать идентификатор категории. Сначала получите объект категории для "Sale", т.е.

sale_category = category.objects.get(pk=4)

тогда просто используйте

prod = sale_category.shop_set.all()

В качестве примечания, постарайтесь использовать имена классов, соответствующие стандарту PEP-8. То, как вы называете свои классы, сбивает с толку

Используйте related_name для этого

class shop(models.Model):
   s_category = models.ForeignKey(category, on_delete= models.CASCADE, related_name='shop_list')

В views.py

def index(request):
   specific_category = category.objects.get(id=4)
   prod = category.shop_list.all() #use related_name here
   params = {'prod': prod}
   return render(request, "main/index.html", params )

Подсказка: имена ваших классов должны следовать соглашению UpperCaseCamelCase, поэтому они должны быть Shop, Category

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