- Сначала вы изменяете 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
, так как он вам не нужен. Просто убедитесь, что у вас есть нужный экземпляр в контексте представления.