Как изменить поля модели CustomUser в представлении и формах
Я создаю систему подсчета баллов и хочу регистрировать баллы для тех, кто активен на сайте, например, когда кто-то оставляет комментарий, получает 5 баллов, но у меня ничего не получилось, и я перепробовал несколько методов.
models.py
class CustomUser(AbstractUser):
activity_point = models.PositiveIntegerField(default=0)
Первый метод в views.py
class NewsDetailView(generic.DetailView):
model = News
template_name = 'news/news_details.html'
def get_context_data(self, **kwargs):
context = super().get_context_data()
if self.request.user.is_authenticated:
context['comment_form'] = CommentForm()
return context
def post(self, request, *args, **kwargs):
form = CommentForm(request.POST)
if form.is_valid():
news = self.get_object()
form.instance.author = request.user
form.instance.news = news
self.request.user.activity_point += 5 # Here
form.save()
return redirect(reverse('news_detail', kwargs={
'pk': news.uid
}))
Второй метод в views.py
class CitizenNewsCreateView(mixins.LoginRequiredMixin, generic.CreateView):
model = News
template_name = 'news/news_create.html'
form_class = CitizenReporterForm
success_url = reverse_lazy('citizen_report_list')
def get_queryset(self): # Here
user = CustomUser.objects.filter(username=self.request.user.username)
change_activity_point = user.activity_point + 5
return change_activity_point
def form_valid(self, form):
form.instance.author = self.request.user
form.instance.active = False
form.instance.citizen = True
return super(CitizenNewsCreateView, self).form_valid(form)
Я ожидаю, что он изменит точку активности на 5.
Вы не сохранили пользователя:
class NewsDetailView(generic.DetailView):
model = News
template_name = 'news/news_details.html'
def get_context_data(self, **kwargs):
context = super().get_context_data()
if self.request.user.is_authenticated:
context['comment_form'] = CommentForm()
return context
def post(self, request, *args, **kwargs):
form = CommentForm(request.POST)
if form.is_valid():
news = self.get_object()
form.instance.author = request.user
form.instance.news = news
form.save()
user = self.request.user
user.activity_point = F('activity_point') + 5
user.save()
return redirect('news_detail'pk=news.uid)