Искал везде, но ничего не мог найти, хотя это так просто.
Так что в основном у меня есть два класса в моем models.py
class Restaurant(models.Model):
restaurant_title = models.CharField(max_length=30)
location = CountryField(null=True, blank_label='(select country)')
first_purchase_discount = models.BooleanField(default=False)
updated = models.DateTimeField(auto_now=True)
slug = models.SlugField(max_length=30, unique=True)
def save (self, *args, **kwargs):
self.slug = slugify(self.restaurant_title)
super(Restaurant, self).save(*args, **kwargs)
def __str__(self):
return self.restaurant_title
class Pizza(models.Model):
pizza_title = models.CharField(max_length=20)
restaurants = models.ManyToManyField('Restaurant', blank=True)
slug = models.SlugField(max_length=20, unique=True)
def save (self, *args, **kwargs):
self.slug = slugify(self.pizza_title)
super(pizza, self).save(*args, **kwargs)
def __str__(self):
return self.pizza_title
Теперь я зарегистрировал модели в моем admin.py
.
Там я создал, скажем, Ресторан Тони и Ресторан Паппо.
С другой стороны, я создал пиццу: A, B, C и D.
Через отношения ManyToMany я соединил Pizza A,B and C to Toni
и B, C and D to Pappo
.
В моем views.py
я создал Listview, который функционирует как домашняя страница, чтобы показать, где отображаются все рестораны:
restaurants = Restaurant.objects.all()
Чтобы перечислить пиццу, я создал DetailView. Я создал ссылку в моем restaurant_list.html (которая функционирует как домашняя страница) для доступа к пицце
{% for restaurant in restaurants %}
<h2><a href="{% url 'pizza_detail' restaurant.slug %}">{{ restaurant.restaurant_title }}</a></h2>
{% endfor%}
Я получаю рестораны, и каждый связывает меня с пиццей, с которой я их ассоциировал, или, по крайней мере, я хочу, чтобы это произошло.
здесь четкое представление на моем views.py
class RestaurantListView(ListView):
model = Restaurant
def get_context_data(self, **kwargs):
context = super(RestaurantListView, self).get_context_data(**kwargs)
return context
def home(request):
template = 'restaurant/restaurant_list.html'
restaurants = Restaurant.objects.all()
context = {
'restaurants': restaurants
}
return render(request, template, context)
class PizzaDetailView(DetailView):
model = Pizza
def get_context_data(self, **kwargs):
context = super(ShopDetailView, self).get_context_data(**kwargs)
return context
def pizza_detail(request, slug):
template = 'restaurant/pizza_detail.html'
pizzas = Pizza.objects.all()
context = {
'pizzas': pizzas,
}
return render(request, template, context)
Из-за пиццы = Pizza.objects.all () я, очевидно, получаю все пиццы. Но, конечно, я хочу только связанные с ними, что означает, что когда я нажимаю на Тони, я хочу видеть Pizze A, B и C и связанные пиццы для Pappo, когда я нажимаю на ссылку «это».
Должен ли я изменить pizzas = Pizza.objects.all()
или for loop
в моем pizza_detail.html
, который сейчас выглядит следующим образом?
{% for pizza in pizzas %}
<h1>{{pizza.pizza_title}}</h1>
{% endfor%}
Надеюсь, вы поняли мою точку зрения.
Ps: можете ли вы также сказать мне, как также показать название ресторана в моем pizza_detail.html, через который я нажал на ссылку.
Большое спасибо <3 </p>
EDIT
home.urls.py
urlpatterns = [
url('admin/', admin.site.urls),
url(r'^users/', include('django.contrib.auth.urls')),
url(r'^', include('restaurant.urls')),
]
restaurant.urls.py
urlpatterns = [
path('', home, name='restaurant_list'),
path('restaurant/<slug:slug>/', pizza_detail, name='pizza_detail')
]