Django как показать many2many дополнительных полей в форме?

вот мои models.py:


    class EssentialOil(models.Model):
    name = models.fields.CharField(max_length=120, verbose_name="Nom")
    latin_name = models.fields.CharField(max_length=120, verbose_name="Nom latin")
    abbreviation = models.fields.CharField(max_length=8, verbose_name="Abbréviation")
    image = models.fields.CharField(default=None, null=True, blank=True, max_length=255, verbose_name="Photo")
    administrationmodes = models.ManyToManyField('AdministrationMode', through="EssentialOil_AdministrationMode",
                                                 verbose_name="Mode d'administration")
    components = models.ManyToManyField('Component', through="EssentialOil_AdministrationMode",
                                        verbose_name="Composants")
    warnings = models.ManyToManyField('warning', through="EssentialOil_AdministrationMode",
                                      verbose_name="Points d'attention")
    properties = models.ManyToManyField('property', through="EssentialOil_AdministrationMode",
                                        verbose_name="Propriétés")
    uses = models.ManyToManyField('use', through="EssentialOil_AdministrationMode",
                                  verbose_name="Utilisations thérapeuthiques")

    class Meta:
        ordering = ['name']

    def __str__(self):
        return self.name

class AdministrationMode(models.Model):
    mode = models.fields.CharField(max_length=100, verbose_name="Mode")
    description = models.fields.CharField(max_length=2000, verbose_name="Description")
    warning = models.fields.TextField(max_length=2000, default="Aucun", verbose_name="Point d'attention")

    eo = models.ManyToManyField(EssentialOil, through='EssentialOil_AdministrationMode', blank=True,
                                verbose_name="H.E. concernées")

    class Meta:
        ordering = ['mode']

    def __str__(self):
        return self.mode

class EssentialOil_AdministrationMode(models.Model):
    class Efficiency(models.IntegerChoices):
        RARE = 1
        PARFOIS = 2
        SOUVENT = 3
        IDEAL = 4

    eo = models.ForeignKey("EssentialOil", null=True, on_delete=models.CASCADE)
    am = models.ForeignKey("AdministrationMode", null=True, on_delete=models.CASCADE)
    co = models.ForeignKey("Component", null=True, on_delete=models.CASCADE)
    pr = models.ForeignKey("Property", null=True, on_delete=models.CASCADE)
    us = models.ForeignKey("Use", null=True, on_delete=models.CASCADE)
    wa = models.ForeignKey("Warning", null=True, on_delete=models.CASCADE)

    efficiency = models.IntegerField(Efficiency.choices)

    class Meta:
        unique_together = [['eo', 'am']]

Мой forms.py:


    from django import forms
from django.forms import ModelForm
from .models import EssentialOil, AdministrationMode, Component, Warning, Property, Use


class CreateEssentialOil(ModelForm):
    class Meta:
        model = EssentialOil
        fields = "__all__"

    administrationmodes = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple,
                                                         queryset=AdministrationMode.objects.all(),
                                                         label="Mode d'administration")
    components = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple,
                                                         queryset=Component.objects.all(),
                                                         label="Composants")
    warnings = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple,
                                                         queryset=Warning.objects.all(),
                                                         label="Points d'attention")
    properties = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple,
                                                         queryset=Property.objects.all(),
                                                         label="Propriétés")
    uses = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple,
                                                         queryset=Use.objects.all(),
                                                         label="Utilisations thérapeutiques")

Мой views.py :


from django.forms import inlineformset_factory
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from .models import EssentialOil, AdministrationMode, Component, Warning, Property, Use, EssentialOil_AdministrationMode
from .forms import CreateEssentialOil, CreateAdministrationMode, \
    CreateComponent, CreateWarning, CreateProperty, CreateUse


def create_essentialoil(request):
    form = CreateEssentialOil()
    if request.method == 'POST':
        form = CreateEssentialOil(request.POST)
        if form.is_valid():
            print(request.POST)
            form.save()
            return HttpResponseRedirect('/essentialoil/essentialoils')
        else:
            print(request.POST)
    # if a GET (or any other method) we'll create a blank form
    else:
        form = CreateEssentialOil()

    return render(request, 'essentialoil_app/forms/essentialoil_form.html', {'form': form})

Когда я создаю EssentialOil, я хотел бы иметь возможность выбрать несколько AdministrationMode и дать значение эффективности для этого AdministrationMode.

Теперь я могу создать EssentialOil и выбрать AdministrationMode, но я не знаю, как сделать поле "effeciency" видимым в моей форме, как на рисунке ниже. Как я хотел бы видеть его в моей форме

Надеюсь найти здесь помощь. Спасибо за прочтение. JP

Я нашел решение, используя Inlineformset.

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