Dans mon application, j'ai des utilisateurs, et chaque utilisateur peut parler plusieurs langues, chacune à un niveau différent. Voilà donc comment je l'ai écrit mes modèles:Django: Écrire un modèle Créer/Mettre à jour pour un modèle avec une relation ManyToMany-Through
class Language(models.Model):
name = models.CharField(max_length=255
class UserProfile(AbstractUser):
languages = models.ManyToManyField(Language, through='SpeakingLevel')
class SpeakingLevel(models.Model):
user = models.ForeignKey(UserProfile)
language = models.ForeignKey(Language)
LEVEL_OK = 1
LEVEL_BAD = 2
LEVEL_CHOICES = (
(1, "Ok"),
(2, "Bad")
)
level = models.IntegerField(null=True,
choices=LEVEL_CHOICES)
Mon doute est comment dois-je écrire les modèles pour la création/mise à jour UserProfile. Je n'ai aucune idée. L'idée est d'avoir quelque chose comme ça (c'est une capture d'écran de okcupid.com):
Bien sûr, je peux le faire manuellement avec beaucoup de javascript, et peut-être un moteur de template javascript pour ajouter de nouvelles langues à la liste, mais il semble fou de gérer une relation, je suis sûr que je manque une fonctionnalité de Django cool pour gérer cela.
Quelle est la bonne façon de procéder?
Fondamentalement, vous devez créer un formset en ligne pour votre modèle 'SpeakingLevel' et l'attacher à votre formulaire' UserProfile'. Voir [les docs] (https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#inline-formsets). Je pense que cela vous donnera ce que vous cherchez. –
Le formset en ligne plus [django-formset-js] (https://pypi.python.org/pypi/django-formset-js/) a fait l'affaire. Je vous remercie! –