2010-02-01 6 views
0

Mon problème est lié à cette question: Default ordering for m2m items by intermediate model field in DjangoUtilisation des propriétés python dans les modèles django?

class Group(models.Model): 
    name = models.CharField(max_length=128) 
    _members = models.ManyToManyField(Person, through='Membership') 
    @property 
    def members(self): 
     return self._members.order_by('membership__date_joined') 

    def __unicode__(self): 
     return self.name 

J'utilisé la meilleure solution de réponse que vous voyez ici, cependant, il a cassé ma forme de modèle qui est basé sur le modèle du groupe. Lorsque je soumets le formulaire, je reçois _members dans la liste d'erreurs de mon formulaire de modèle, car le champ est obligatoire et ne peut plus soumettre de formulaires basés sur ce modèle.

La meilleure réponse dans la question précédente suggère un moyen d'imiter le comportement du champ en utilisant la propriété. Comment ferais-je cela pour cacher complètement les membres du formulaire?

Merci, Pete

+1

Il est bon de créer un lien vers une question connexe, mais il est très utile que vous indiquiez exactement ce que vous avez eu, ce que vous avez et l'erreur que vous obtenez. –

+0

Pouvez-vous publier à quoi ressemble votre formulaire? Cela peut nous aider à le réduire. –

Répondre

0

Si c'est un unique, vous pouvez exclure le champ _members lorsque vous créez le ModelForm:

class GroupForm(ModelForm): 
    class Meta: 
     model=Group 
     exclude = {'_members',} 

Si vous faites cela beaucoup, vous pourriez envisager de créer un sous-classe de ModelForm et remplacer la méthode init pour exclure automatiquement les propriétés commençant par un trait de soulignement.

+0

Je vois que vous essayez de gérer un bug django. Je soupçonne qu'une propriété n'est pas ce que vous voulez car ModelForms n'a aucune idée de ce qu'est une propriété python. Pour résoudre ce problème, vous devrez peut-être ajouter un champ personnalisé au modèle, puis remplir les choix de membres en remplaçant la méthode init, comme dans cet exemple: http://stackoverflow.com/questions/1387431/django- model-modelform-how-to-get-dynamique-choix-en-choix – Sam

Questions connexes