【发布时间】:2012-05-20 22:58:55
【问题描述】:
这不是一个技术问题,而是一个“我这样做的方式是否正确”的问题。
我定义了几个模型
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 文档没有 似乎真的涵盖了这些稍微复杂的领域,所以我是 有点不确定。
- 我应该使用 render_to_response 还是 上面的HttpResponseRedirect?或者可能是我不知道的第三种选择 关于。
任何建议表示赞赏。
仅供参考,我知道上面的代码并不理想,即缺少验证、cmets ...等,它只是为了演示目的而提供的。不过,请随时指出任何严重的问题。
【问题讨论】: