Configurer les représentations textuelles qui seront utilisées dans les ChoiceField des forms Django.

 Django  Comments Off on Configurer les représentations textuelles qui seront utilisées dans les ChoiceField des forms Django.
Jul 282018
 

Longtemps que je n’avais pas posté de billets dans cette partie du blog. (Vous allez me dire longtemps que je n’ai pas posté de billet tout court, et vous auriez raison, mais ma bonne résolution de fin de vacances d’été est de changer cela).

Mais donc, pour reprendre doucement dans la partie technique, je vais commencer par partager un truc que tout le monde connaît sûrement déjà. Sauf que perso, j’oublie à chaque fois que cette fonctionnalité de django existe et donc je galère pour la retrouver. Du coup je me dis qu’en l’écrivant je finirais par la mémoriser (et donc en fait j’écris plus pour moi qu’autre chose, je suis un vilain !:) ).

Donc imaginons que vous avez un modèle. Truc assez classique. Ce modèle vous lui avez défini une représentation textuelle de base avec str . Sauf que vous avez plusieurs forms, donc certains ont des ChoiceFields utilisant ce modèle (Exemple un modèle User et vous avez un modèle Post où vous devez choisir le rédacteur du billet). Et manque de chance, vous avez besoin d’une représentation textuelle différentes de celle de base pour un de vos forms. Où même pire, vous avez besoin de plusieurs représentations textuelles différentes, pour plein de forms différents.

Vous êtes alors bien marri.

Mais en fait non, parce que Django vous fourni une façon à la fois simple et élégante de faire. A chaque fois que vous aurez besoin d’une représentation textuelle qui ne soit pas celle par défaut, il vous suffira de définir une classe dérivant de ModelChoiceField et qui implémentera la méthode label_from_instance. Cette méthode prend comme unique paramètre l’objet qui doit voir sa représentation textuelle définit et renvoie une chaîne de caractère.

Petit exemple tiré de la doc django :

from django.forms import ModelChoiceField

class MyModelChoiceField(ModelChoiceField):
    def label_from_instance(self, obj):
        return "My Object #%i" % obj.id

Voilà. Aussi simple que cela. Vous n’avez plus qu’à utiliser votre classe fille de ModelChoiceField dans votre formulaire et le tour et joué.

Bonus, ça marche aussi pour les MultipleChoiceField, il faudra simplement définir une classe fille de ModelMultipleChoiceField

et le lien vers la doc qui parle de tout cela : (https://docs.djangoproject.com/fr/2.0/ref/forms/fields/)

 Posted by at 22:22

Pyconfr au pays des galettes saucisses !

 Python  Comments Off on Pyconfr au pays des galettes saucisses !
Oct 202016
 

Ce week-end (enfin en vrai depuis jeudi si on compte les sprints) c’était donc le week-end de la Pyconfr. Et c’était à Rennes. Je ne dis pas ça comme un reproche, même si je nierais l’avoir écrit, j’aime plutôt bien Rennes. Bon d’accord il pleut tout le temps et il semblerait qu’un certains nombre de personne de bonne compagnie perdent tout sens commun quand il est question de choisir un lieu d’habitation et choisissent Rennes .. Mais hormis ces deux défauts (et aussi le fait qu’il y a rien d’ouvert le dimanche, non de non), c’est plutôt sympa comme ville.

Donc la pyconFr.

Etant à Lille les trois jours précédents, j’ai loupé la soirée d’ouverture qui avait l’air d’être plus que cool (ben oui, même si il y a des TGV direct Lille → Rennes, ils mettent quand même 4h à faire le trajet, donc en partant à 18h, c’était un peu mort pour la soirée).

Le samedi.

Fichtre le monde, fut la première chose qui m’a traversé l’esprit quand je suis arrivé samedi matin. Et effectivement, le fait qu’il y avait beaucoup, beaucoup beaucoup de monde s’est ressenti toute la journée. Dans les salles de conf pleines avec des gens debout, par terre, en mode sardine la belle-iloise, dans les queues face aux trois food truck qui s’occupaient de nous nourrir à la pause midi et dans la vitesse à laquelle les thermos de café se vidaient à peine posées sur la table.

Les confs en elles-mêmes portaient beaucoup sur deux sujets :  machine learning et d’asyncio. Ça tombait bien, c’est deux sujets qui m’interressent beaucoup en ce moment.

Mais à priori c’est deux sujets qui intéressent beaucoup de monde. Et les salles n’étaient malheureusement pas prévu pour le nombre de pythonistes présent. Ce qui fait que pour certaines conférences, il y a parfois eu des gens qui n’ont pas pu rentrer parce que les salles n’étaient pas assez grande. Heureusement qu’il y aura les vidéos (parce que bien entendu, je fais parti de ceux qui ne purent, au moins une fois, pas voir une conf).

Le dimanche.

M’étant levé un peu tard, (amener toute sa famille pour pyconfr n’aide pas à être à l’heure le dimanche matin, ranger une chambre d’hôtel en vérifiant bien qu’on n’y oublie rien, cela prend du temps .. [je ne veux même pas imaginer ce que donnerais l’oubli d’un doudou à l’hôtel…] ) je n’ai pas pu assister à toutes les confs du matin (et en plus honte sur moi, j’ai loupé l’AG de l’afpy … ce qui n’est pas bien du tout). Et comme j’avais un TGV à 16h, idem, je n’ai pas vraiment pu profiter de l’après-midi de conf. Mais  le « bref » moment que j’ai pu rester le dimanche m’a tout de même permis de discuter plus longuement avec les personnes avec qui je n’avais pas pu échanger le samedi.

Au final.

Ma première pyconfr à Rennes avait été une petite pyconfr (et au niveau des conférences que j’avais pu voir , je n’en ai pas un souvenir renversant au final). Cette PyconFR 2016 a vraiment tout d’une grande PyconFR. L’orga était top, les conférences étaient top, j’ai pu croiser des gens que j’apprécie énormément et que je ne voie vraiment pas assez souvent. Avec des salles un peu plus grandes et plus d’espaces pour se poser, tranquillement et au chaud, (parce que bon Rennes, temps pourri, pluie tout le temps, ce n’est pas vraiment possible de se poser dehors), ça aurait été une PyconFR parfaite. En tout cas merci aux orgas, merci aux orateurs, merci à ceux que j’ai pu croiser et avec qui j’ai pu échanger. Et vivement pyconfr 2017. [Bon et vivement DjangoCong 2017, retour au soleil et à la plage pour l’édition 2017 !!! Mais chut, je ne vous ai rien dit …  ]

 Posted by at 01:24

Django 1.7 et écriture de tests, petites explorations

 Django  Comments Off on Django 1.7 et écriture de tests, petites explorations
Nov 022014
 

Je me suis enfin lancé dans l’écriture d’une app django gérant les badges (ou les succès si vous préférez). L’objectif étant de pouvoir réécrire de zéro histoires de rôlistes. L’idée était de tenter de faire une vraie app django, en mode réutilisable, histoire que peut-être des gens puissent trouver intéressant de l’utiliser.

Je me suis retrouvé avec deux problèmes concernant mes tests :

  • Souvent on gagne un badge quand on a créé suffisamment de chose (comme des checkin, des billets de blogs ou des contributions diverses). Sauf que je ne voulais pas créer dans mon app des models ne servant à rien, juste pour pouvoir en créer lors de mes tests.
  • Je voulais pouvoir créer des badges se gagnant sur un critère du style ‘être venu un certain nombre de fois sur une URL.’ Donc mettre en place des décorateurs sur des vues. Mais là encore, je ne voulais pas avoir à créer des vues dans mon application rien que pour les tests.

Au final, en lisant un peu de doc, j’ai réussi à faire ce que je voulais.

Tester un décorateur sans créer des  vues inutiles dans son app.

Je savais déjà comment forger des requests avec la RequestFactory. Par contre pour créer des vues, je n’en avais pas la moindre idée.. Une petite question plus tard, Foxmask m’a indiqué un lien qui allait me donner la solution que je cherchais. (le voici) Il suffisait au final d’utiliser mock pour créer, directement dans mes tests, une fausse vue que j’allais pouvoir décorer.
Une dernière subtilité, comme vous le verrez dans le lien novapost (ou dans mon code), si vous utilisez wraps pour créer votre décorateur, il faudra ajouter l’argument assigned=available_attrs(view_func) à votre appel à wraps (tout comme django le fait). Cela sera nécessaire pour pouvoir utiliser votre décorateur en mode fonction, ce que vous devrez faire dans vos tests, à cause d’un bug python 2 (celui-ci :http://bugs.python.org/issue3445)

Créer des models uniquement pour les tests

Ici après quelques test infructueux, je suis finalement tombé sur ce ticket dans le track django. Dont le dernier commentaire remonté à 2 mois. Et en fait, l’astuce est toute simple. Il suffit de créer le model de test dans le fichier de test qui va bien (c’est ici au niveau de mon code) et ensuite de modifier manuellement une des migrations django pour ajouter la création du modèle, uniquement si on est dans le mode Test. Petite modification de mon cru comparé au code donné dans le ticket, j’ai fait en sorte que les models de tests soit créé si la base commence par test ou si elle est stockée en mémoire (mon code est ici).

Rien de bien merveilleux ou de bien révolutionnaire, mais bon, on ne sait jamais, ça pourrait peut-être être utile à l’un d’entre vous.

 Posted by at 18:41
Apr 102014
 

Vous êtes djangonautes ? Et vous n’avez pas encore acheté votre billet pour DjangoCon Europe ?

Alors peut-être que vous ne le saviez pas. Après tout, même si on a essayé de faire un maximum de com sur le sujet, on n’en fait jamais assez et il est fort possible que vous soyez passé à coté.

Donc, je vous refais un petit topo.

3 jours de confs du 13 au 15 mai et 2 jours de sprint le 16 et 17 mai. Et tout cela en France, donc facile au niveau transport, il vous suffit de prendre un TGV.

Mais surtout, surtout, ce ne sont pas trois jours de confs dans une simple salle de conf, aussi belle soit-elle.

Non, ce sont trois jours de confs (et 2 jours de sprint) dans une île. Oui, dans une ILE. L’île des embiez pour être exact, une petite île qui se trouve dans le Var qui appartient à la famille Ricard.

Imaginez donc la scéne. Vous sortez de votre TGV à Toulon, vous prenez un bus et vous arrivez sur un port, le port du Busc. Et la vous prenez un petit ferry et vous voguez, le doux soleil de méditerranée vous réchauffant les neurones.

Et puis après 10 minutes d’une aventureuse traversée, vous accosterez, tel Jim Hawkins, sur l’île des poneys ! Et vous n’en repartirez plus avant 3 (ou 5) jours. Parce que oui, quitte à faire des choses folles, on s’est dit qu’on allait aussi prendre en charge l’hébergement. Comme ça vous n’aurez pas à vous embêter à chercher un hotel proche des conférences, à pester parce que celui que vous vouliez n’a plus de chambre, etc etc, non tout est compris dans le billet.

Et puis on s’est dit que comme c’était sur une île, y il y avait donc des plages. Et que qui dit plage dit baignade. Et que votre conjoint(e) allait peut être vous en vouloir si vous partiez 3 ou 5 jours au soleil sans lui/elle. Donc il y a un forfait pour les accompagnant(e)s et les enfants aussi. Comme ça, vous pouvez même venir en famille.

En fait, la seule chose que l’on ne fournit pas, c’est la crème solaire. Pour le reste, que ça soit nourriture, vin, fromage, ou café, pas de problème. (Par contre, je suis désolé mais je crois que la pizza froide n’est pas au menu des repas… mais vous survivrez à 3 jours sans pizza froide hein ? Surtout si on le remplace par des poissons grillés à la plancha).

Bon après vous allez me dire que tout ça, c’est bien beau. Mais que des confs on y vient surtout pour les confs et pas que pour passer des vacances ; Et qu’il va falloir que le programme il secoue les cocotiers (par contre désolé, il y en a pas sur l’île des cocotiers) un peu, parce que sinon, autant aller à une conf php hein ..

Alors je vous dirais, que vu le programme que l’on vous a préparé, les cocotiers ils vont carrément se trémousser des racines jusqu’au noix de coco. Parce qu’il n’y a vraiment que du bon (et là ce n’est pas l’organisateur qui parle mais le djangonaute impatient).

Vous voulez comprendre à quoi sert App Loading ? (une des nouveautés de la future version). Ca tombe vraiment bien parce qu’Aymeric Augustin vous en parlera pendant une keynote qui s’annonce captivante. Vous faites de l’ecommerce et vous utilisez django-oscar ou vous voulez l’utiliser ? Vous êtes vraiment chanceux, le créateur de django-oscar sera là. Il vous le présentera et bien entendu vous aurez trois jours pour discuter avec lui. Et en plus, comme personne ne quitte l’île, vous êtes sur de ne pas le rater. Il sera forcément là, sur l’île, avec vous ! Et là, je ne vous parle que de deux conférences, mais je pourrais aussi vous parler de Meghan qui va nous parler de expérience utilisateur, de Christophe pettus, de Jacob Burch et Kaplan Moss qui vont disséquer Django, de Julia qui parlera RAD et Django, d’Angel qui mixe Jeux vidéos et REST, etc etc .. Mais je ne vais pas non plus vous faire un copier coller de la page programme, je vous ai donné le lien, vous pourrez juger par vous même et voir quelles seront les confs qui vont vous faire dire ‘Whouaaaa, il faut que j’y sois’.

Donc récapitulons ensemble  :
– un super lieu juste totalement fou (vous voulez des photos, allez en voir ici !! )
– un super programme
– des confs qui sont à la fois des confs et des vacances ( je vous ai dit qu’il y avait une piscine aussi ? Et un sauna ? En accès libre pour les conférenciers ? Non parce que je suis pas sur de vous l’avoir dit)

Maintenant la question que je me pose c’est : Si vous n’avez pas encore votre billet, pourquoi vous perdez du temps à me lire ? Foncez, les ventes seront stoppées le 20 avril au soir !!!

Ha, je pourrais dire aussi que ça sera l’occasion de voir une tripotée de Djangonautes, français ou pas ; l’occasion donc de refaire le monde du développement web une fois de plus, le soir, un verre de ricard (avec ou sans alcool) à la main tandis que le chant des cigales nous bercera doucement.

Non mais vous êtes encore là ? J’espère que vous avez votre ticket alors !!!

 Posted by at 17:41

Code Retreat

Il y a quelques mois (en juin), j’ai participé à une code retreat sur Lyon. Autant dire que pour prendre un TGV a 6h du mat, je devais être motivé ! Avant de vous parler plus du pourquoi c’est bien une code retreat, je vais quand même vous expliquez ce que c’est. Prenez un nombre pair […]

Pytong, des tongs, une plage, des présentations et des gens biens

La semaine dernière j’ai eu le plaisir d’assister (et de prendre la parole) à la première édition de Pytong, première édition, un événement organisé par Laurent et David à Toulon. Le samedi, direction la Cantine de Toulon dans les locaux de l’ISEN. La journée s’est découpée en deux parties, conférences et ligthing talk jusqu’à 15h […]

Aide mémoire virtualenv et Ubuntu

Petit aide mémoire des problèmes que j’ai pu avoir avec virtualenv, marre de devoir chercher à coup de history et de grep quand je retombe sur le soucis. En mettant à jour ma ubuntu, je suis tombé sur un problème assez ennuyeux, mes virtualenv ne voulaient plus fonctionner. L’erreur qui m’était renvoyé était tout sauf […]

Les poneys envahissent la ville rose, aka DjangoCon Toulouse, vive les pains aux chocolats !

Ce week-end avait lieu la première DjangoCon Toulouse, une rencontre django régionale au pays du cassoulet. Les festivités commençaient à 11h30 le samedi avec des LT, puis une rafale de huit conférences l’après midi, et pour finir sprint et ateliers le dimanche. Cette Djangocon est également la première Cong qui n’était pas un événement autonome […]

Des poneys avec des chapeaux ronds  aka DjangoBreizh, les poneys envahissent la bretagne

Samedi 17 novembre c’était donc la première edition des DjangoBreizh, une rencontre django locale en bretagne organisé par Exirel (bon ok, je ne suis pas tout a fait breton et pourtant j’y étais mais j’étais une exception) Le programme se découpait ainsi : matin conférence début d’après midi LT reste de l’après midi barcamp ou atelier […]

Orateurs, les rencontres django régionales ont besoin de vous !

L’un des résultats des discussions de la dernière DjangoCong fut de lancer l’idée de faire des DjangoCon régionales plus petites et qui permettraient de ne pas centraliser les attentes de toute la communauté sur un seul événement national. Et du coup d’éviter de générer de la frustration pour ceux qui n’ont pu acheter leurs billets […]

Installation de virtualenvwrapper chez Alwaysdata

J’ai il y a quelques temps fait de multiples tests chez AD. Certains nécessitaient l’utilisation de paquet python non installé par défaut sur le serveur mutu AD. Du coup, j’ai voulu installer virtualenwrapper pour me simplifier la tache. Voici la méthode que j’ai utilisé. Je suis preneur de toute amélioration que vous pourriez me remonter […]