J'écris une application webblog dans Django. J'ai actuellement 2 modèles Post et PostMeta. Post est un modèle de style de poste standard avec des champs tels que l'auteur, le titre, le contenu, etc. Il contient également un seul champ many-to-many appelé post_meta qui est associé à mon deuxième modèle PostMeta. PostMeta est un modèle de nom/valeur simple avec deux champs, meta_key et meta_value. Ce que j'essaie de faire est de personnaliser le formulaire du modèle Post dans l'interface d'administration pour être plus intuitif. Plus précisément, je veux abstraire la création d'associations PostMeta plutôt que de voir la boîte de sélection non intuitive qui est redéfinie par défaut pour l'administrateur. Je veux à la place afficher un champ de texte à la place de cette boîte de sélection où l'utilisateur peut entrer une liste d'étiquettes séparées par des virgules associées à la publication. Lorsque le formulaire est soumis, je veux diviser l'entrée du champ d'étiquette en tags individuels et enregistrer chacun comme un PostMeta où meta_key sera mis à "TAG" et meta_value sera l'une des chaînes séparées par des virgules.Django: Enregistrer dans un champ many-to-many dans la méthode save() d'un ModelForm?
Le problème que je rencontre est que je n'arrive pas à l'enregistrer correctement. Je ne suis pas sûr s'il y a un problème avec ma syntaxe (je suis relativement nouveau à python) ou s'il y a autre chose que j'ai besoin de faire que j'ai peut-être manqué. Voici un extrait de mon admin.py:
class PostAdminForm(forms.ModelForm):
tags = forms.CharField(max_length=200)
class Meta:
model = Post
def save(self, commit=True):
model = super(PostAdminForm, self).save(commit=False)
if commit:
model.save()
splitTags = self.cleaned_data['tags'].split(',')
for tag in splitTags:
pm = PostMeta(meta_key="TAG", meta_value=tag)
pm.save()
model.post_meta.add(pm)
return model
class PostAdmin(admin.ModelAdmin):
model = Post
form = PostAdminForm
admin.site.register(Post, PostAdmin)
Des conseils ou des suggestions sur la façon de faire ce travail serait génial. Apprendre encore: \