これは技術的な質問ではなく、「これを正しい方法で行っているか」という質問です。
いくつかのモデルが定義されています
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)
タスクの性質上、html フォームを介してデータを入力することはできません。そのため、それらを入力するために、jquery と多くのイベント関数およびその他の JavaScript グッズを含む html ページを用意しています。保存ボタンをクリックすると、.ajax() が呼び出され、収集されたすべての変数が渡されます。
var saveRequest= $.ajax({
url: "/save_style/",
type: "POST",
data: "selection="+s+"&user="+user+"&src="+image_src,
dataType: "text"
});
私の save_style ビューは、値をモデルに保存します
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))
これを行った後、成功ページに移動して、モデルに追加したばかりのレコードを表示したいのですがrender_to_response
、モデルの詳細を使用して返す場合は、ページ全体を JavaScript で再構築する必要があります。新しいテンプレートですがHttpResponseRedirect
、a) 値を返すことができず、b) 正しくリダイレクトされていないようです (投稿が私の JavaScript から発信されているためだと思います)。
最後に私の質問
- これは本当に私がこれを行うべきですか?django doc は、これらのやや複雑な領域を実際にはカバーしていないように見えるので、少し確信が持てません。
- 上記の render_to_response または HttpResponseRedirect を使用する必要がありますか? または、おそらく私が知らない3番目のオプションです。
任意の提案をいただければ幸いです。
参考までに、上記のコードは理想的ではないことを知っています。つまり、検証やコメントの欠落などです。単にデモンストレーション目的で提供されています。ただし、深刻な問題がある場合は遠慮なく指摘してください。