2010-01-15 6 views
2

J'ai un (GoogleAppEngine) Django ModelForm:Django ModelForm: l'ajout d'un alias à un champ

class A(db.Model): 
    a = db.StringProperty() 

class MyAForm(djangoforms.ModelForm): 
    class Meta: 
    model = A 

Cela crée une forme qui a un champ de chaîne a. Sur mon formulaire, j'aimerais appeler ça autre chose, disons b. Donc, je voudrais un formulaire avec un champ appelé b et lorsque le formulaire est POSTed, nous créons une nouvelle entité A avec la propriété a rempli avec la valeur b.

Y a-t-il une façon ordonnée de faire la plomberie pour cela?

(P.S. Je ne veux pas changer le modèle sous-jacent)

Répondre

0
class A(db.Model): 
    a=db.StringProperty(verbose_name='b') 
+0

« (ps je ne veux pas changer le modèle sous-jacent) » –

+0

désolé, j'ai manqué que – tback

5

Il est pas clair ce que vous voulez dire quand vous dites que vous voulez « appeler » quelque chose sur le terrain d'autre sur votre formulaire. Voulez-vous dire l'étiquette? C'est facile à faire:

class MyAForm(djangoforms.ModelForm): 
    a = forms.CharField(label='b') 
    class Meta: 
    model = A 

Si vous voulez changer l'ID HTML sous-jacent, vous pouvez le faire via le widget:

a = forms.CharField(widget=forms.TextInput(attrs={'id':'b'})) 

Je ne pense pas qu'il est possible de changer HTML du champ réel nom, mais je ne peux pas penser à une raison pour laquelle vous voulez faire cela.

+0

je veux être en mesure de faites ce qui suit (en supposant que j'ai défini la bonne vue): 'curl -d" b = my_b_string "http: // domain.com/api/A' Cela crée un nouveau A (a = 'my_b_string '). – nafe

+0

Si vous avez deux formulaires sur la même page, où ils contiennent tous les deux le champ de nom. C'est le scénario dans lequel je suis tombé, où je veux alias l'un d'entre eux, donc le request.POST, lorsqu'il est passé dans le formulaire, récupérera les variables correctes. –

+3

@Richard: Voilà à quoi servent les préfixes de formulaires: http://docs.djangoproject.com/fr/1.1/ref/forms/api/#prefixes-for-forms –

0

l'inverse devrait être en train de redéfinir l'étiquette du champ:

class MyAForm(forms.ModelForm): 

    class Meta: 
     model = A 

    def __init__(self, *args, **kwargs): 
     super(MyAForm, self).__init__(*args, **kwargs) 
     self.fields['a'].label = 'something' 
Questions connexes