这不是一个技术问题,更多的是“我是以正确的方式做这件事”的问题。Django的帖子和回复
我有几个模型定义
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和大量的html页面事件函数和其他JavaScript的好东西。当点击保存按钮被我称之为阿贾克斯(),并通过所有收集到的变量
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?或者可能有第三种选择我不知道 左右。
任何建议表示赞赏。
仅供参考我知道上面的代码并不理想,即缺少验证,评论等,它仅仅是为演示目的而提供的。尽管指出任何严重的问题。
OP声明不适合使用HTML表单来创建他的模型对象,所以ModelForm不会太有用。 – patrickn
我正在做的事情自然不适合形式,标记图像和用户选择动态构建的结果。也许我应该使用表单,但是我不知道如何处理文本框或单选按钮中没有很好包含的数据。感谢您的建议。 – debugoz