【发布时间】:2011-07-31 07:41:41
【问题描述】:
使用 Django 1.2 我正在创建一个葡萄酒评论网站。用户应该只能对每种葡萄酒进行一次评论,但应该能够返回并重新评论一种葡萄酒而不会引发错误。
使用 get_or_create 方法似乎是最合理的解决方案,但我在实现它时遇到了各种问题。搜索我发现这篇文章看起来很有希望: Correct way to use get_or_create?
当然还有关于它的 django 文档: http://docs.djangoproject.com/en/1.2/ref/models/querysets/#get-or-create
但似乎没有回答我的问题。这是我的代码:
Views.py
@login_required
def wine_review_page(request, wine_id):
wine = get_object_or_404(Wine, pk=wine_id)
if request.method == 'POST':
form = WineReviewForm(request.POST)
if form.is_valid():
review, created = Review.objects.get_or_create(
user = request.user,
wine = wine,
like_dislike = form.cleaned_data['like_dislike'],
...
)
variables = RequestContext(request, {
'wine': wine
})
review.save()
return HttpResponseRedirect(
'/detail/%s/' % wine_id
)
else:
form = WineReviewForm()
variables = RequestContext(request, {
'form': form,
'wine': wine
})
return render_to_response('wine_review_page.html', variables)
Models.py
class Review(models.Model):
wine = models.ForeignKey(Wine, unique=True)
user = models.ForeignKey(User, unique=True)
like_dislike = models.CharField(max_length=7, unique=True)
...
如果我了解如何正确使用 get_or_create,因为我没有匹配所有值 like_dislike 等...然后 django 认为它是唯一的。我尝试删除其他表单参数,但随后它们没有与发布请求一起提交。
建议将不胜感激。
【问题讨论】:
-
唯一的like_dislike 字段不会有问题吗?那不应该只是一个不唯一的 BooleanField 吗?
标签: django-models django-forms django-views