ManyToMany
관계 라고 한다.# 접근 방법
question = Question.objects.get(id=question_id)
voter_list = question.voter.filter(username=request.user)
# pybo/model.py
class Question(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='author_question')
subject = models.CharField(max_length=200)
content = models.TextField()
create_date = models.DateTimeField()
modify_date = models.DateTimeField(null=True, blank=True) # blank는 form.is_valid() 검사시 값이 없도된다라는 뜻.
voter = models.ManyToManyField(User, related_name='voter_question')
def __str__(self):
return self.subject
# pybo/views/vote_views.py
@login_required(login_url='common:login')
def vote_question(request, question_id):
'''
pybo 질문 추천 등록
'''
question = get_object_or_404(Question, pk=question_id)
# Question모델에서 값을 가져오는 방법.
voter_list = question.voter.filter(username=request.user).first()
if request.user == question.author:
messages.error(request, '본인이 작성한 글은 추천할 수 없습니다.')
# 추천 삭제.
elif request.user == voter_list:
question.voter.remove(request.user)
print("이미 추천 했습니다.")
else:
question.voter.add(request.user)
return redirect('pybo:detail', question_id=question.id)
참고
ManyToMany Relationship(좋아요, 프로필, Follow), QuerySet은 lazy하다, Pagination