Как сделать запрос для некоторых полей моделей?
Я делаю бизнес-каталог и застрял на страницах бизнес-каталога в городах и районах.
Я сделал простой бизнес-каталог. Мне нужно всего три запроса; Forexample название категории: Производство
Первый: Мне нужна одна страница вроде этой: abc.com/directory/category/slug:slug (этот slug означает название категории)/ (Я сделал, у меня нет проблем с этой страницей.
Второй: Урл города выглядит следующим образом abc.com/directory/category/slug:slug/(название города в стиле slug)/. forexample abc.com/category/manufacturing/london/
>Третье: Урл района, как здесь abc.com/directory/category/slug:slug/(название города со стилем slug)/. forexample abc.com/category/manufacturing/london/southwark(названия районов)
Я сделал только первый, а второй и третий свели меня с ума...
Я пробовал многое, но безуспешно...
Вот мои коды:
models.py
from django.db import models
from django.urls import reverse
from tinymce import models as tinymce_models
# Create your models here.
class City(models.Model):
city = models.CharField(max_length=50)
slug = models.SlugField()
def __str__(self):
return str(self.city)
class District(models.Model):
district = models.CharField(max_length=50)
slug = models.SlugField()
city = models.ForeignKey(City, on_delete=models.CASCADE)
def __str__(self):
return str(self.district)
class FirmaCategory(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField()
class Meta:
verbose_name_plural = 'Firma Kategorileri'
def __str__(self):
return str(self.title)
class Firma(models.Model):
category = models.ForeignKey(FirmaCategory, related_name="Firma", on_delete=models.CASCADE)
title = models.CharField(max_length=255)
slug = models.SlugField()
adres = tinymce_models.HTMLField()
tel = tinymce_models.HTMLField()
website = tinymce_models.HTMLField()
email = tinymce_models.HTMLField()
intro = tinymce_models.HTMLField()
body = tinymce_models.HTMLField()
city = models.ForeignKey(City,related_name="FirmaCategory" ,on_delete=models.CASCADE)
district = models.ForeignKey(District,related_name="FirmaCategory", on_delete=models.CASCADE)
#url = models.CharField(max_length=255)
date_added = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name_plural = 'Firmalar'
def __str__(self):
return str(self.title)
def get_absolute_url(self):
return reverse('firma-frontpage')
views.py
from django.db.models import Q
from django.shortcuts import render
from .models import Firma, FirmaCategory, City, District
from django.utils.html import format_html
from django.views.generic import CreateView
from .forms import FirmaForm
# Create your views here.
def firmaana(request):
firmalar = Firma.objects.all()
context = {
'firmalar': firmalar
}
return render(request, 'firma/firma-frontpage.html', context)
def firmadetail(request, slug):
firmax = Firma.objects.get(slug=slug)
context = {
'firmax': firmax,
}
return render(request, 'firma/firma-detail.html', context)
def firmacategory(request, slug):
firmacategory = FirmaCategory.objects.get(slug=slug)
context = {
'firmacategory': firmacategory
}
return render(request, 'firma/firma-category.html', context)
urls. py
urlpatterns = [
path('kategory/city/<city>/', views.list_businesses_by_city, name='firmail'),
path("", views.firmaana, name="firma-frontpage"),
path("<slug:slug>/", views.firmadetail, name="firma-detail"),
path("kategory/<slug:slug>/", views.firmacategory, name="firma-category"),
path("1/add-firma/", FirmaEkle.as_view(), name="firma-ekle"),
path('tinymce/', include('tinymce.urls')),
Если я правильно вас понял...
views.py
def firmacity(request, city_slug):
try:
city = City.objects.get(slug=city_slug)
context = {
"firma" : Firma.objects.filter (city=city)
}
return render(request, tmpl, context)
except City.DoesNotExist:
context = {
"error" : "City does not exist"
}
return render(request, tmpl, context)
def firmadistrict(request, city_slug, dist_slug):
city = City.objects.get(slug=city_slug)
if city is not None:
district = District.obects.get(city=city)
if district is not None:
firma = Firma.objects.filter(district=district)
context = {
"firma" :firma,
}
return render(request, tmpl, context)
context = {
"error" : "Error in city/district"
}
return render(request, tmpl, context)
Есть два разных подхода для работы с ошибками, например, когда кто-то намеренно вводит другие значения в url браузера. Надеюсь, это поможет.