2010-02-24 1 views
1

Je suis en train d'écrire un widget personnalisé dont je veux retourner une liste en tant que valeur. De ce que je peux trouver pour définir la valeur qui est retournée, vous créez une fonction personnalisée value_from_datadict. Je l'ai faitDans django formulaires liste de retour de widget personnalisé en tant que valeur au lieu de la chaîne

def value_from_datadict(self, data, files, name): 
    value = data.get(name, None) 
    if value: 
     # split the sting up so that we have a list of nodes 
     tag_list = value.strip(',').split(',') 
     retVal = [] 
     # loop through nodes 
     for node in tag_list: 
      # node string should be in the form: node_id-uuid 
      strVal = str(node).split("-") 

      uuid = strVal[-1] 
      node_id = strVal[0] 

      # create a tuple of node_id and uuid for node 
      retVal.append({'id': node_id, 'uuid': uuid}) 

     if retVal: 
      # if retVal is not empty. i.e. we have a list of nodes 
      # return this. if it is empty then just return whatever is in data 
      return retVal 

    return value 

Je pense que cela renvoie une liste, mais lorsque j'imprime la valeur, il est retourné comme une chaîne plutôt que d'une liste. La chaîne elle-même contient le bon texte mais comme je l'ai dit c'est une chaîne et non une liste. Un exemple de ce qui est retourné pourrait être

[{'id': '1625', 'uuid': None}] 

mais si je ne str [0] il imprimer [au lieu de { 'id': '1625', 'UUID': Aucun}

Comment puis-je l'empêcher de convertir ma liste en chaîne?

Merci

+0

Ajouté une modification à la réponse précédente. – gruszczy

Répondre

2

Eh bien, il est simple: si vous avez un CharField, vous obtiendrez une chaîne en conséquence, parce que CharField utilise la méthode to_python, que le résultat contraint chaîne. Vous devez créer votre propre Field pour celui-ci et renvoyer une liste.

VIEUX

Pouvez-vous poster le résultat de:

x = value_from_datadict(..) 
print type(x) 

afin que nous puissions voir, ce qui est retourné exactement?

Et pourriez-vous publier l'ensemble du cas de test que vous utilisez pour fournir l'exemple?

+0

voir ci-dessus pour le code – John

+0

Merci pour la réponse. Y a-t-il des exemples ou quelque part vous pouvez me signaler cela me montrera ceci comme je ne suis pas sûr de savoir comment faire ceci? N'y at-il pas un champ mis en place pour une liste telle que multiplechoicefield que je pourrais utiliser? – John

+1

Ici vous allez: http://stackoverflow.com/questions/1526806/tutorial-about-how-to-write-custom-form-fields-in-django – gruszczy

Questions connexes