【发布时间】:2021-06-13 13:40:17
【问题描述】:
我正在尝试为我的用户添加 like 按钮。我的AbstractUser 模型中有两种类型的用户,由user_type 分隔。我想要 like 按钮的这种行为:KORISNIK 类型的用户可以按MAJSTORI 类型为用户点赞。
但是当我尝试运行我的解决方案时,我收到了这个错误:
未找到带有参数“(”,)”的“like_majstor”的反向。尝试了 1 种模式:['likeProfile/(?P[0-9]+)$'] 问题
models.py
class CustomKorisnici(AbstractUser):
MAJSTOR = '1'
KORISNIK = '2'
USER_TYPE_CHOICE = (
(MAJSTOR, 'majstor'),
(KORISNIK, 'korisnik')
)
user_type = models.CharField(max_length=100,blank=True,choices=USER_TYPE_CHOICE)
username = models.CharField(max_length=100,unique=True)
...
def __str__(self):
return self.username + ' | ' +self.last_name + ' | ' + self.first_name + ' | ' + str(self.phone_number) + ' | ' + self.user_type + ' | ' + self.email+ ' | ' + str(self.id)
class LikeButton(models.Model):
user = models.ForeignKey(CustomKorisnici, on_delete=models.CASCADE)
likes = models.ManyToManyField(CustomKorisnici,related_name='profile_like')
views.py
def LikeProfile(request,pk):
like = get_object_or_404(LikeButton, id=request.POST.get('majstori_id'))
like.likes.add(request.user)
return HttpResponseRedirect(reverse('majstori_profile', args=[str(pk)]))
class MajstoriProfile(DetailView):
model = CustomKorisnici
context_object_name = 'majstori'
template_name = 'majstori_profile.html'
def get_context_data(self, *args, **kwargs):
user = CustomKorisnici.objects.all()
context = super(MajstoriProfile, self).get_context_data(*args, **kwargs)
majstori= get_object_or_404(CustomKorisnici, id=self.kwargs['pk'])
context['majstori'] = majstori
return context
urls.py
path('likeProfile/<int:pk>', LikeProfile, name="like_majstor"),
模板:
<form action="{% url 'like_majstor' majstor.pk %}" method="post">
{% csrf_token %}
<button type="submit" name="majstor_id" value="{{ majstor.pk }}" class="btn">Like</button>
</form>
【问题讨论】:
-
请显示呈现给定模板的另一个视图。
-
应该是
{% url 'like_majstor' majstori.pk %}?注意i。你已经设置了context_object_name = 'majstori'。
标签: django django-views django-templates django-urls