Как связать несколько моделей с внешним ключом и создать соответствующие представления, чтобы данные отображались в шаблонах в Django? - PullRequest
0 голосов
/ 14 марта 2020

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

Этот процесс похож на Cashify. (https://www.cashify.in/sell-old-mobile-phone).

Как только пользователь нажимает на определенную марку, он перечисляет все доступные устройства под этой маркой.

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

Вот код:

models.py

class Brand(models.Model):
    title               = models.CharField(max_length=50)
    brand_image         = models.ImageField()
    slug                = models.CharField(max_length=50, default='slug')

    class Meta:
        verbose_name_plural = "Brands"

    def __str__(self):
        return self.title

class Storage(models.Model):
    ram_storage = models.CharField(max_length=2, default=1)
    rom_storage = models.CharField(max_length=3, default=2)
    class Meta:
        verbose_name_plural = "Storages"

    def __str__(self):
        return (self.ram_storage + "/" + self.rom_storage)

class Mobile(models.Model):
    title = models.CharField(max_length=50)
    thumbnail = models.ImageField()
    slug = models.CharField(max_length=50)
    max_selling_price = models.IntegerField(default=10000)

    brand = models.ForeignKey(Brand, default="Apple", related_name='brand', verbose_name="Brands", on_delete=models.SET_DEFAULT)
    storage = models.ForeignKey(Storage, related_name='storage', default=1, verbose_name="Storage", on_delete=models.CASCADE)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('brand-detail', kwargs={
            'slug': self.slug
        })

views.py

def brand_detail_view(request, slug):
    phone = Mobile.objects.filter(brand__slug = slug)
    context = {
        "phones": phone
    }

    return render(request, "brand-detail.html", context)

def phone_detail_view(request, slug):
    phone = get_object_or_404(Mobile, brand__slug=slug)
    context = {
        "phone": phone
    }
    return render(request, "phone-detail.html", context)
...