2010-07-12 6 views
2

De la documentation officielle, je ne peux pas comprendre quel est le paramètre par défaut.get_or_create() question

obj, created = Person.objects.get_or_create(first_name='John', last_name='Lennon', 
        defaults={'birthday': date(1940, 10, 9)} 

Est-ce que cela signifie qu'il va chercher dans les champs qui correspondent à la fois paramètre John et Lennon et anniversaire sera simplement insérer? Puis-je utiliser autre chose que les valeurs par défaut?

Et quelle méthode dois-je utiliser pour nettoyer tous les champs de la table (modèles)?

Il me donne l'erreur FileField ne peut pas résoudre par défaut mot-clé dans le champ

Je dois donc chercher Fiels, si je l'ai trouvé - données de mise à jour. Si je ne l'ai pas trouvé je dois créer un nouveau champ ... Mais, comme je l'ai compris, il ne me mettra pas à jour les champs par défaut quand je trouverai des champs présents.

Répondre

4

C'est assez évident - si get_or_create trouve un objet interrogé, le keword defaults ne fait rien. Mais s'il crée un objet, alors l'instance stockée dans obj a un champ birthday (dans votre exemple) rempli de valeur. Vous pouvez passer n'importe quel dictionnaire comme defaults, tant que ses clés sont des noms de champs valides pour le modèle que vous interrogez.

Pour nettoyer toute la table, vous devez utiliser quelque chose comme:

Model.objects.all().delete() 

qui est équivalent:

DELETE FROM app_model WHERE True; 

Pour définir un champ dans chaque objet (une colonne dans chaque ligne), il est procédé update():

Model.objects.all().update(some_field = "") 

qui se traduit par:Mon sql est un peu rouillé, mais je crois que ça va comme ça, plus ou moins.

+0

Alors ça ne me convient pas. Ai-je besoin de chercher un champ avec un nom propre. Si je l'ai trouvé, j'ai besoin de mettre à jour les champs, mais si je ne l'ai pas trouvé, je dois le créer et écrire tous les champs. – Pol

0

Vous pouvez utiliser n'importe quoi. par défaut si vous ne définissez rien.

+0

Alors, qu'est ce que ce dictionnaire? Qu'est-ce que ça va faire, les paramèters qui sont à l'intérieur? – Pol

+0

ceci est appelé le mot-clé param, il correspondra au paramètre appelant à la fonction appelée par le nom de paramètre. – chenge

1

Vous pouvez consulter la documentation django this pour une explication plus détaillée de la méthode get_or_create. En bref, il essaie d'abord d'obtenir avec le first_name et le last_name fournis, sinon il instancie et enregistre un nouvel objet auquel cas le dictionnaire par défaut est utilisé. Et la valeur de retour est l'objet correspondant et True/False si un nouvel objet a été créé ou non.

+0

Il me donne l'erreur FileField ne peut pas résoudre mot-clé par défaut dans le champ – Pol

+0

Il devrait être par défaut, pas par défaut (notez le manque de 's') –