/ / Forme Django: création inline ManyToMany - python, django, formes django, plusieurs-à-plusieurs, formset

Formulaire Django: création en ligne ManyToMany - python, django, formes django, plusieurs-à-plusieurs, formset

J'aimerais pouvoir permettre aux utilisateurs de créer des emplacements "à la volée" lorsqu'ils créent un rapport. En utilisant les modèles suivants si possible.

des modèles:

class Report(models.Model):
...
location = forms.ManyToManyField(Location)

class Location(models.Model):
name = forms.CharField(max_length=255)
...

Le comportement que je recherche est proche de celui donné par les formulaires django.

En fait, je suis actuellement en mesure de le faire en utilisant plutôt une relation de clé étrangère et des formulaires. En utilisant cette technique,django-extra-views et django-dynamic-formsetJe peux même permettre aux utilisateurs de choisir le nombre de lieux qu’ils souhaitent ajouter.

Une version strip-up de la configuration actuelle:

des modèles:

class Report(models.Model):
...

class Location(models.Model):
name = forms.CharField(max_length=255)
report = forms.ForeignKey("Report")

formes:

class LocationForm(forms.ModelForm):
class Meta:
model = Location
fields = "__all__"

class LocationFormSet(extra_views.InlineFormSet):
model = TestLocation
form_class = TestLocationForm

vues:

class ReportCreateView(extra_views.CreateWithInlinesView):
model = Report
inlines = [LocationFormSet, ]

Malheureusement, en utilisant cette configuration, un emplacement peutn'appartient pas à plus d'un rapport qui apporte beaucoup d'emplacement dupliqué. C’est la raison pour laquelle je pense que la relation ManyToMany conviendrait mieux. Je suis tombé sur certaines réponses relatives à cette question qui parlait de modèle intermédiaire, mais je n’ai pas pu aller seul pour le faire fonctionner.

Est-ce leur un moyen de modifier ma configuration de travail à faireça marche avec une relation nombreuse? Ou existe-t-il une approche complètement différente permettant à l’utilisateur de créer "à la volée" les emplacements lors de la création du rapport?

Merci!

Réponses:

0 pour la réponse № 1

Pour créer "à la volée", j'avais changé ManyToMany par ForeingKey.

    class Report(models.Model):
...
location = forms.ManyToManyField(Location)  # REMOVE

class Location(models.Model):
report = models.ForeignKey(Report)  # ADD
name = forms.CharField(max_length=255)
...

Et ensuite, InlineForms fonctionnera.