Как запросить внешний ключ в Django с условиями if и сделать что-то, если условие выполнено

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

models.py:

STATUS_CHOICE = (
    ('draft', 'Draft'),
    ('in_review', 'In Review'),
    ('published', 'Published')
)

class Package_Category(models.Model):
    title = models.CharField(max_length=10000, verbose_name="Title")
    slug = models.SlugField(max_length=1000, unique=True)

    def get_absolute_url(self):
        return reverse("package-categories", args=[self.slug])
    
    def __str__(self):
        return self.title
        
    class Meta:
        verbose_name = "Package Category"
        verbose_name_plural = "Package Categories"

class Vectors(models.Model):
    title = models.CharField(max_length=10000, null=True, blank=True, verbose_name="Title")
    slug = models.SlugField(unique=True)
    image = models.ImageField(upload_to="vectors-images/%Y/%m/%d/", default="default.jpg", verbose_name="Image Cover")
    vec_file = models.FileField(upload_to='vector-uploads/%Y/%m/%d/', null=True, blank=True, verbose_name="Upload File")
    category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name="Category")
    package_category = models.ForeignKey(Package_Category, on_delete=models.CASCADE, verbose_name="Package Category")
    tags = models.ForeignKey(Tag, on_delete=models.CASCADE, verbose_name="Tag")
    status = models.CharField(choices=STATUS_CHOICE, default="published", max_length=150, verbose_name='Status')
    creator = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="Creator")
    creator_image = models.ImageField(upload_to="creators-images/%Y/%m/%d/", default="default.jpg", verbose_name="Creator Image")
    created = models.DateTimeField(verbose_name="Created")

    class Meta:
        verbose_name = "Vector"
        verbose_name_plural = "Vectors"

    def get_absolute_url(self):
        return reverse("vector-details", args=[self.slug])

    def __str__(self):
        return self.title

index.html:

views.py:

from django.shortcuts import render
from . models import Vectors, Tag, Category, Package_Category

def index(request):
    vectors = Vectors.objects.filter(status='published').order_by('-created')

    context = {
        'vectors': vectors,
    }

    return render(request, 'index.html', context)

вам следует сделать что-то подобное, если вы не используете drf, просто используя ту же модель.

def index(request):
    vectors = Vectors.objects.filter(status='published', package_category__ title =="premimum").order_by('-created')

     if vectors.exists():

        // do something:
     

    context = {
        'vectors': vectors,
    }

    return render(request, 'index.html', context)

Хотя лучшим вариантом было бы использование сериализаторов с drf

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