2010-08-01 3 views
2

J'ai cherché des sujets similaires, mais ne l'ai pas trouvé ce que je dois ..utilisateurs Django: obtenir la liste des groupes, ou comment convertir MultipleChoiceField à ChoiceField

I étendu modèle utilisateurs avec le modèle de userattributes, certains champs supplémentaires ajoutés et etc .. maintenant j'essaye de faire ModelForm dehors ceci .. ainsi j'ai un petit problème ici ..

JE VEUX énumérer des groupes comme ChoiceField pas un MultipleChoiceField. C'est une exigence par la spécification ainsi doit être ainsi.

donc voici le code ..

from django.forms    import ModelForm 
from django.contrib.auth.models import User 
from helpdesk.models.userattributes  import * 
from django.utils.translation import ugettext as _ 

class SettingsOperatorsForm(ModelForm): 


    groups = forms.ChoiceField(
     label=_(u'Rights'), 
     required=True, 
     choices=["what's in here?"] 
    ) 

    class Meta: 
     model = UserAttributes 
     fields = ('first_name', 'last_name', 'job_title', 'email', 'password', 'is_active', 'groups' ) 

il y a auth_group table base de données, donc j'ai essayé de le faire comme ça, mais j'ai un pas de forme affichée du tout:

from django.contrib.auth.models import User, Group 

groups = forms.ChoiceField(
    label=_(u'Rights'), 
    required=True, 
    choices=Group.objects.all() 
) 

Je pense qu'il vaut mieux serait juste convertir multipleChoiceField à ChoiceField

en Causeries:

alt text

deviendrait simplement une boîte SELECT.

Répondre

0

il Appea rs que c'est que modelchoice serait faux parce que le groupe actuel sous forme d'édition ne sera pas selected = « selected »

donc c'est la solution ENFIN:

groups = forms.ModelMultipleChoiceField( 
    queryset=None, 
    required=True, 
    widget=GroupsSelect, 
) 

def __init__(self, *args, **kw): 
    super(ModelForm, self).__init__(*args, **kw) 
    self.fields['groups'].queryset=Group.objects.filter(user=self.instance.id) 

#view 
op = UserAttributes.objects.get(id=operator_id) 
form = SettingsOperatorsForm(instance=op) 
1

Juste une rétroaction, parce que 2 heures pas de réponse, donc thnx à freenode #django =)

http://docs.djangoproject.com/en/dev/topics/forms/modelforms/

Il est possible de passer outre les widgets pour un champ dans Meta classe comme ceci:

from django.forms import ModelForm 

class AuthorForm(ModelForm): 
    class Meta: 
     model = Author 
     widgets = { 'groups': forms.Select(),} 

NE FONCTIONNE PAS

forms.ChoiceField() aussi .. rien n'a changé .. toujours afficher ing .. MultiChoice sélectionner

MISE À JOUR

from django.contrib.auth.models import User, Group 
groups = forms.ChoiceField(
     required=True, 
     choices = [ [g.id, g.name] for g in Group.objects.filter() ] 
    ) 

Cela fonctionne .. il est ok, mais pourquoi le remplacement widget de l'enfer ne fonctionne pas ????

RÉSOLU parce que j'ai django 1.1 = (ma stupidité ..

4

Réglage des choix au moment de la définition de la forme, comme vous le faites dans votre réponse, signifie que la forme ne verra jamais de nouveaux groupes qui . sont définis

plutôt que d'utiliser un ChoiceField avec une compréhension de la liste des choix, vous devez utiliser un ModelChoiceField avec un paramètre queryset:

groups = forms.ModelChoiceField(queryset=Group.objects.all()) 
+0

J'ai eu hier ce problème, ne pouvait toujours pas comprendre . =) thnx pour la réponse. – holms

Questions connexes