2016-02-11 3 views
1

Comment définir dynamiquement les valeurs d'un modèle d'objet Django en itérant à travers les paramètres de la requête GET.Modèle d'objet Django - valeur de réglage dynamique

Obtenez donc le nom du champ et les valeurs de l'objet de requête et utilisez-le pour parcourir et mettre à jour le modèle Django avec les champs respectifs.

user = request.GET.get('user') 
name = request.GET.get('name') 
created = request.GET.get('created') 
modified = request.GET.get('modified') 

obj, created = Obj.objects.get_or_create(user=user, name=name) 

if created: 

    obj.created = created 
    obj.modified = modified 

    obj.save(update_fields=['created', 'modified']) 
+0

utiliser un formulaire modèle https://docs.djangoproject.com/fr/1.9/topics/forms/modelforms/#modelform – Anentropic

Répondre

1

Ceci est généralement réalisé par un ModelForm il vous permet de cartographier les paramètres de requête à une instance de modèle et de valider les paramètres, puis éventuellement enregistrer/mettre à jour l'instance.

L'utilisation d'un formulaire est probablement le moyen le plus sûr, et les meilleures pratiques def, mais il n'y a aucune raison que vous ne pouvez pas itérer dynamiquement sur le request.GET

for k, v in request.GET.items(): 
    setattr(obj, k, v) 

obj.save(update_fields=[request.GET.keys()]) 

Ce manque un contrôle que la k est une propriété réelle de Obj. Les assertions de type doivent avoir lieu lors de la sauvegarde, mais le workflow de formulaire permet d'avoir des manières standardisées et uniformes de détecter les erreurs de type et de les présenter au client lorsque cela se produit.

+0

merci beaucoup ... très heureux pour cette info ... je vais Jetez un coup d'oeil à la ModelForm –