Необходимо получить определенный объект внешнего ключа 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