Как создать кнопку подписки в Django - PullRequest
0 голосов
/ 13 февраля 2019

Я новичок в веб-разработке и программировании на Python.

Я хочу создать кнопку, с помощью которой пользователи смогут подписываться и отписываться от подканала (очень похоже на категорию форума) на форуме.

Я действительно хочу, чтобы пользователь мог подписываться и отписываться, нажимая кнопку подканала.

views.py:

class SubChannelSubscriptionView(ListView):
    template_name = 'subscription.html'
    model = Topic

    def get_queryset(self):
        return SubChannelSubscription.objects.filter(user=self.request.user)

    def get_context_data(self, **kwargs):
        context = super(SubChannelSubscriptionView, self).get_context_data(**kwargs)
        context['SubChannel'] = SubChannel.objects.all()
        context['top'] = Topic.objects.filter(category__subchannel_subs__user=self.request.user)
        return context

    def subd(self, request):
        subchannel = get_object_or_404(SubChannel, pk=self.kwargs['pk'])
        is_subd = False
        if subchannel.subd.filter(pk=request.user).exists():
            subchannel.subd.remove(request.user)
            is_subd = False
        else:
            subchannel.is_subd.add(request.user)
            is_subd = True
        return reverse('index')

models.py:

class SubChannel(models.Model):
    title = models.CharField(max_length=150, unique=True, null=True)
    description = models.CharField(max_length=150, null=True)
    subd = models.ManyToManyField(User, related_name='subd' )

subscription.html:

<form action="{% url 'index' %}" method="post">
    {% csrf_token %}
    {% if is_subd %}
        {% for sb in SubChannel %}
            <button type="submit" value="" > subd{{ sb }} </button>
        {% endfor %}
    {% else %}
         {% for sb in SubChannel %}
              <button type="submit"  value="" >not sub {{ sb }}</button>
         {% endfor %}    
    {% endif %}
</form>

1 Ответ

0 голосов
/ 13 февраля 2019

простой способ переключения между подписками - создать для него URL-адрес и выполнить его с помощью ajax.этот URL, по его мнению, мы получаем пользователя и канал, затем мы можем найти, запросив, что если пользователь подписан на канал, если True, то удалить его, иначе добавить этого пользователя в канал.

Я могу 'не размещать код для этого, потому что я не понимаю логику.Здесь я заметил, что SubChannel имеет ForaignKey channel и ManyToManyField пользователя.

Я думаю, что должно быть только две модели

  1. Канал
  2. Пользователь ->Канал ManyToManyField

Таким образом можно легко управлять пользователем, имеющим несколько каналов, и всеми пользователями, подписанными на канал.Добавление третьего DBTable для UserChannel выполняется внутри Django ORM. (Я понимаю, что это может не подходить для ваших конкретных требований.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...