Ceci est moins une question technique, plus une question de "est-ce que je fais cela de la bonne manière".
J'ai plusieurs modèles définis
class Style(models.Model):
tag_xml = models.TextField()
image = models.ImageField(upload_to="styles")
user = models.ForeignKey(User)
uploaded = models.DateField()
class StyleMatch(models.Model):
style = models.ForeignKey(Style)
item = models.ForeignKey(FashionItem)
Ils ne peuvent pas être populés via des formulaires html simplement en raison de la nature de la tâche, donc pour les peupler j'ai une page html avec jquery et beaucoup de fonctions d'événements et d'autres astuces javascript. Lorsque le bouton de sauvegarde est cliqué, j'appelle .ajax() et passe toutes les variables collectées
var saveRequest= $.ajax({
url: "/save_style/",
type: "POST",
data: "selection="+s+"&user="+user+"&src="+image_src,
dataType: "text"
});
Mon vue save_style enregistre ensuite les valeurs dans le modèle
def save_style(request):
if request.method == 'POST':
selection = request.POST['selection'].rsplit("|")
user = request.POST['user']
src = request.POST['src']
f = open(MEDIA_ROOT+src)
image_file = File(f)
u = User.objects.get(id=user)
style = Style(tag_xml = "",
image = image_file,
user = u,
uploaded = date.today())
style.save()
for s in selection:
if (s != ''):
match = FashionItem.objects.get(id=s)
styleMatch = StyleMatch(style = style,
item = match)
styleMatch.save()
i = StyleMatch.objects.filter(style=style)
items = FashionItem.objects.filter(id__in=i)
return render_to_response('style_saved.html', dict(image=src, items=items, media_url = MEDIA_URL), context_instance=RequestContext(request))
Après avoir fait cela, je veux vraiment aller sur une page de succès et afficher les enregistrements que je viens d'ajouter au modèle, cependant si j'utilise render_to_response
et renvoie les détails du modèle, je dois reconstruire toute la page en javascript, il semble préférable de rediriger vers un nouveau modèle, mais si j'utilise HttpResponseRedirect
a) je ne peux pas renvoyer des valeurs et b) il ne semble pas rediriger correctement (je pense que cela vient du fait que le post provient de mon javascript).
Donc enfin mes questions
- Est-ce vraiment comment je devrais faire cela? La documentation de django ne semble pas vraiment couvrir ces domaines légèrement plus compliqués, donc je suis un peu incertain.
- Devrais-je utiliser render_to_response ou HttpResponseRedirect ci-dessus? Ou peut-être une troisième option que je ne connais pas.
Toutes les suggestions sont appréciées.
Pour information, je sais que le code ci-dessus n'est pas idéal c'est-à-dire qu'il manque de validation, de commentaires... etc, il a simplement été fourni à des fins de démonstration. N'hésitez pas à signaler tout problème sérieux cependant.