Django - Как отобразить поле формы в виде таблицы, содержащей только некоторые элементы, соответствующие определенным критериям?

У меня такая форма:

forms.py

from django.forms.models import ModelForm
from .models import Order

class OrderForm(ModelForm):
    class Meta:
        model = Order
        fields = '__all__'

От этой модели:

models.py

from django.db import models
from django_countries.fields import CountryField
from django.core.validators import MaxValueValidator

class Category(models.Model):
    name = models.CharField(max_length=255)
    description = models.TextField(blank=True)
    image = models.ImageField(blank=True)

    def __str__(self) -> str:
        return f"{self.name}"

class Product(models.Model):
    name = models.CharField(max_length=255)
    category = models.ForeignKey(to=Category, on_delete=models.CASCADE)
    description = models.TextField(blank=True)
    price = models.DecimalField(max_digits=8, decimal_places=2)
    image = models.ImageField(blank=True)
    vat_percentage = models.DecimalField(max_digits=4, decimal_places=2, blank=True)

    @property
    def price_with_vat(self):
        if self.vat_percentage:
            return (self.price / 100 * self.vat_percentage) + self.price 
        else:
            return self.price

    def __str__(self) -> str:
        return f"{self.name} / {self.price} EUR"

class Address(models.Model):
    street = models.CharField(max_length=255)
    city = models.CharField(max_length=255)
    country = CountryField()
    zip_code = models.PositiveIntegerField(validators=[MaxValueValidator(99999999)])

    def __str__(self):
        return f"{self.street} / {self.city}"

class DeliveryAddress(models.Model):
    street = models.CharField(max_length=255)
    city = models.CharField(max_length=255)
    country = CountryField()
    zip_code = models.PositiveIntegerField(validators=[MaxValueValidator(99999999)])

    def __str__(self):
        return f"{self.street} / {self.city}"

class Order(models.Model):
    name = models.CharField(max_length=255)
    surname = models.CharField(max_length=255)
    address = models.ForeignKey(Address, on_delete=models.PROTECT)
    delivery_address = models.ForeignKey(DeliveryAddress, on_delete=models.PROTECT)
    company_name = models.CharField(max_length=255)
    company_ico = models.PositiveIntegerField(validators=[MaxValueValidator(9999999999)])
    company_dic = models.PositiveIntegerField(validators=[MaxValueValidator(999999999999)], blank=True)
    company_vat = models.PositiveIntegerField(validators=[MaxValueValidator(999999999999)], blank=True)
    products = models.ManyToManyField(Product)

А вот мое мнение:

views.py

def create_order(request):
    if request.method == 'GET':
        context = {
            'form': OrderForm
        }
        return render(request, 'eshop/create_order.html', context=context)

Вывод формы выглядит следующим образом: rendered form

Что я хочу достичь:

Поле products в форме должно быть отображено в виде таблицы, выглядящей примерно так: desired output table Остальные поля отображаются нормально, но мне нужно, чтобы products отображалось в виде таблицы. Кроме того, мне нужно перебрать все товары в поле products, чтобы отобразить только те, которые имеют определенный первичный ключ pk (что-то вроде, отобразить только те товары в таблице в форме, где pk == 1 И где pk == 5.

).

Как мне этого достичь?

Спасибо

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