Выбор группы категорий и подкатегорий OPT в Django

У меня есть две три модели:

  • Объявление
  • Категория
  • Подкатегория

Это мой form.py

# Formulaire de la depose d'une annonce
class AnnonceForm(forms.ModelForm):
    title = forms.CharField(label="", help_text="", widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder':'Titre de mon annonce'}))
    category = forms.ModelChoiceField(queryset=Souscat.objects.all(), empty_label='Selectionnez une categorie', label="", help_text="", widget=forms.Select(attrs={'class': 'form-control'}))
    class Meta:
        model = Annonce
        fields = ('title','category')

А это мои модели:

# Catégories
class Category(models.Model):
    title = models.CharField(max_length=255)
    slug = models.SlugField(null=True, unique=True)
    created_date = models.DateTimeField(default=timezone.now)
    
    class Meta:
        verbose_name = "Catégorie"
        verbose_name_plural = "Catégories"

    def __str__(self):
        return self.title

# Sous catégories
class Souscat(models.Model):
    category = models.ForeignKey(Category, related_name="s_category", on_delete=models.CASCADE)
    title = models.CharField(max_length=255)
    slug = models.SlugField(null=True, unique=True)
    created_date = models.DateTimeField(default=timezone.now)
    
    class Meta:
        verbose_name = "Sous catégorie"
        verbose_name_plural = "Sous catégories"

    def __str__(self):
        return self.title

В моем объявлении я получу только подкатегории, но в моем select я хочу показать категории, а подкатегории могут быть выбираемыми. Я видел, что это возможно с "optgroup", но я успешно получил все подкатегории на моем, но я хочу показать категории (не выбираемые) в моем select с подкатегориями (выбираемыми).

Для категории я делаю просто {{ form.category }}

Как я могу это сделать?

Спасибо

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

https://simpleisbetterthancomplex.com/tutorial/2019/01/02/how-to-implement-grouped-model-choice-field.html

По сути, были созданы два класса, которые генерируют код и делают волшебство! Для меня это сработало идеально.

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