Как сделать запрос для некоторых полей моделей?

Я делаю бизнес-каталог и застрял на страницах бизнес-каталога в городах и районах.

Я сделал простой бизнес-каталог. Мне нужно всего три запроса; 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 браузера. Надеюсь, это поможет.

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