【发布时间】:2014-10-06 09:00:59
【问题描述】:
如果对象不存在,我想使用 CreateView 通用视图创建对象,如果存在则编辑它。我使用 kwargs['pk'] 从 url 中捕获一个数字,以使用该数字作为其 ID 来查找餐厅。我使用 request.user 来找出哪个用户正在评价那家餐厅。现在,用户可以对他之前评价过的餐厅进行评分,并且可以在每次提交评分时在评分表中创建新记录。到目前为止,我想出了以下内容。
views.py
class Rate(CreateView):
model = Rating
success_url = "/first/restaurants/%(restaurant_id)s/"
fields = ['rating']
def form_valid(self, form):
form.instance.restaurant = Restaurant.objects.get(id=self.kwargs['pk'])
form.instance.user = self.request.user
return super(Rate, self).form_valid(form)
urls.py
url(r'^restaurants/(?P<pk>[0-9]+)/rate/$', views.Rate.as_view()),
models.py
class Rating(models.Model):
restaurant = models.ForeignKey('Restaurant')
user = models.ForeignKey(User)
RESTAURANT_RATING_CHOICES = (
(1, 'Poor'),
(2, 'Unsatisfactory'),
(3, 'Average'),
(4, 'Good'),
(5, 'Excellent'),
)
rating = models.IntegerField(default=3, choices=RESTAURANT_RATING_CHOICES)
如果用户再次对同一家餐厅进行评分,我不想创建新记录。相反,我想更新他之前对该餐厅的评分。我想我必须为我的 CreateView 类编写一个自定义的 get_object() 方法,或者使用 get_or_create() 之类的方法。我不知道,我很困惑。
【问题讨论】:
标签: python django generics view edit