Как добавить страницу в закладки в Django? - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь отредактировать html-страницу, чтобы вошедший в систему пользователь мог добавить / добавить в закладки video.id

Вот файл .html

<td>
    <form method='POST' action="{% url 'researcher_view_app:favourite_post' video.id %}">
        {% csrf_token %}
        <input type='hidden' name='video' value={{ video.id }}>
        <button type='submit'>Bookmark</button>
    </form>
</td>

Вот файл urls.py

path('<int:fav_id>/favourite_post', views.favourite_post, name='favourite_post'),

Вот файл view.py

def favourite_post(request, fav_id):
    video = get_object_or_404(Video, id=fav_id)
    if request.method == 'POST':
        video.

   return render(request, 'researcher_view_app/%s' % fav_id)

1 Ответ

1 голос
/ 27 марта 2019
  • Сначала вы изменяете models.py , в котором есть пользовательские модели
class ProjectUser(AbstractUser):
    images = models.ManyToManyField(Images)

    def __str__(self):
        return self.email
  • В .html файле добавить следующее:
{% for image in available_images %}
/* show image */
<form method='post' action="{% url 'user-image-add' %}">
 {% csrf_token %}
 <input type='hidden' name='image' value={{image.id}}>
 <button type='submit'>bookmark</button>
</form>
{% endfor %}
  • В вашем views.py добавьте следующий метод
def user_image_add(request):
    user_image_form = ImageForm(request.POST or None)
    if request.method == 'POST' and user_image_form.is_valid(): 
         request.user.images.add(user_image_form.cleaned_data['image'])
         return JsonResponse(status=200)
    raise Http404()
  • Создайте файл forms.py в своем дополнении и добавьте следующее:
class ImageForm(forms.Form):
    image = forms.ModelChoiceField(queryset=Images.objects.all())

Чтобы показать эти изображения с закладками, вы можете просто перебрать request.user.images (это дает вам QS изображений), как в коде выше.


  • В urls.py добавить следующее:

path('user-image-add/', views.user_image_add, 'user-image-add')

  • В models.py добавить метод в модель пользователя для получения bool, если видео добавлено в закладки
def is_bookmarked(self, video_id): 
    return self.bookmarked_videos.filter(id=video_id).exists()

simirlarly is_bookmarked может быть добавлено в модель видео, принимая user_id и проверяя video.projectuser_set.

И добавьте следующее в ваш HTML-файл, где пользователи добавили видео в закладки

`{% if video.is_bookmarked %}`

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