预订模型has_many
评分,具有overall
属性。
我希望每次添加/销毁评级时都会更新Book
的{{1}}属性。
最简单的方法是什么?
答案 0 :(得分:2)
您可以使用模型生命周期挂钩,值得注意的是after_create
。
在您的评分模型中,您可以编写一个更新mean_rating
的创建后钩子#models/rating.rb
after_create :update_book_mean_rating
def update_book_mean_rating
new_mean_rating = self.book.ratings.sum(:overall) / self.book.ratings.count
self.book.update_attributes(mean_rating: new_mean_rating
end
你可能想要添加验证/检查,以确保评级总是有书等,并在销毁时做类似的事情,但这样的事情应该指向正确的方向
答案 1 :(得分:1)
最简单的方法(非线程安全)是在 from django.conf.urls import url
from intranet import views
urlpatterns = [
url(r'^$', views.LoginFormView.as_view(), name='login'),
url(r'^registreer$', views.UserFormView.as_view(), name='registreer')]
模型中使用after_create/after_destroy
回调。见documentation on model callbacks
如果您需要线程安全解决方案,则需要在延迟作业中更新Rating
或其他内容。 This post可能是一个好的开始