Как заполнить данные из выпадающего списка выбора, чтобы данные с определенным идентификатором отображались на главной странице

#html #django

#HTML #django

Вопрос:

Я создал выпадающий селектор и хочу, чтобы данные извлекались из базы данных в соответствии с этим.

У меня есть две модели: Cuisine и Dish . Я выбрал все кухни в своем выпадающем списке (например, индийскую, британскую, французскую и т.д.) И хочу извлечь все блюда из базы данных в соответствии с этим.

Например, когда я выбираю Indian, тогда должны быть выбраны все блюда, связанные с ним, чтобы я мог отобразить их на домашней странице.

model.py

 class Cuisine(models.Model):
    name = models.CharField(max_length=100)


    class Meta:
        ordering = ['-id']

    def __str__(self):
        return self.name 



class Dish(models.Model):
    name = models.CharField(max_length=100)
    image = models.ImageField(upload_to='dishes_pics')
    description = models.TextField()
    required_time_to_cook = models.CharField(max_length=100)
    cuisine = models.ForeignKey(Cuisine, on_delete=models.CASCADE)

    class Meta:
        ordering = ['-id']

    def __str__(self):
        return self.name
  

views.py

 from django.shortcuts import render
from django.http import HttpResponse

from .models import Cuisine,Dish

def select_cuisine(request):
    dish_id = Dish.objects.get(pk = 1)
    cuisine_id = Cuisine.objects.filter(cuisine=cuisine_id)
    return render(request, 'cookbook/base.html', {'cuisine_type' : cuisine_id})



def home(request):
    context = {
        'dishes' : Dish.objects.all()
    }
    return render(request, 'cookbook/home.html',context)
  

index.html

 <li class="nav-item dropdown">
 <a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Select Cuisine</a>
  <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
    {% for type  in cuisine_type %}
      <a class="dropdown-item" href="#">{{ type.name }}</a>
    {% endfor %}
  </div>
</li>
  

Комментарии:

1. Пожалуйста, добавьте скриншот образца данных вашей базы данных

2. Привет, пример данных соответствует полям модели. Например, сначала я создал объект модели Cuisine (например, сначала создаю объект Cuisine и вставляю указанные поля в модель Dish.

Ответ №1:

Попробуйте это:

 name ='Indian'
cuisine_id = Cuisine.objects.filter(name=name).values('id')
dishes = Dish.objects.filter(cuisine_id=cuisine_id).all()
  

Здесь мы сначала выбираем cuisine_id из Cuisine модели, где name='Indian' . Затем выберите все детали из, Dish где cuisine_id Dish равно cuisine_id Cuisine модели.