Как сделать проект Image qualifier в django
Прежде всего, я должен сказать, что я новичок в django и я практикуюсь. Поясню, я создаю проект для оценки изображений, показывая пользователю несколько пар изображений и пользователь должен выбрать то, которое ему больше всего нравится. И я застрял на том, как мне сделать, чтобы показывать записи изображений в парах в зависимости от того, была ли уже оценка. Он показывает вам пару изображений, вы выбираете то, которое вам больше всего нравится, и они должны поменять изображения на два других, вот в чем идея.
Вот мои модели, модель image содержит атрибут поля image и атрибут likes, который хранит лайки пользователей. Модель UserLike содержит только лайки одного пользователя, которые будут добавлены в атрибут likes (возможно, я неправильно определяю класс models, потому что я не нахожу внешний ключ 'user_like' в таблице users)
from django.db import models
from django.core.validators import FileExtensionValidator
from django.contrib.auth.models import User
# Create your models here.
class UserLike(models.Model):
user_like = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
class Images(models.Model):
image = models.ImageField(validators=[FileExtensionValidator])
likes = models.ManyToManyField(UserLike, blank=True)
def __str__(self):
return f'Image: {self.image}'
Вот мои взгляды, я уже сделал логин, который работает для регистрации пользователя. Но в индексе я хочу показывать изображения по два и по мере того как пользователю нравится одно изображение, показываются два других, я перепробовал много всего, но ничего не работает.
from django.db import IntegrityError
from django.forms import ValidationError
from django.shortcuts import redirect, render
from django.contrib.auth.models import User
from django.contrib.auth import login, logout, authenticate
from django.core.validators import validate_email
from .models import Images, UserLike
# Create your views here.
def index(request):
images = Images.objects.all()
return render(request, 'index.html', {
'images': images,
})
def singup(request):
if request.method == 'GET':
return render(request, 'signup.html')
else:
if request.POST['password1'] == request.POST['password2']:
# If True: Register User
try:
user = User.objects.create_user(username=request.POST['username'], email=request.POST['email'], password=request.POST['password1'])
user.save()
login(request, user) # Already logged after register
return redirect('index')
except ValueError:
return render(request, 'signup.html', {
'error':'Please complete the remain fields'
})
except IntegrityError:
return render(request, 'signup.html', {
'error':'User already exist'
})
return render(request, 'signup.html', { # If False: Raise an error
'error':'Password do not match'
})
def signin(request):
if request.method == 'GET':
return render(request, 'login.html')
else:
user = authenticate(request, username=request.POST['username'], password=request.POST['password'])
if user is None:
return render(request, 'login.html', {
'error':'Username or password is incorrect'
})
else:
login(request, user)
return redirect('index')
def signout(request):
logout(request)
return redirect('index')
и вот шаблон индекса
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Home</title>
</head>
<body>
{% load static %}
<h1>Hello World</h1>
{% if user.is_authenticated %}
<p>Logged as: {{user.username}}</p>
<a href="{% url 'logout' %}">Logout</a>
{% else %}
<a href="{% url 'login' %}">Login</a>
<a href="{% url 'signup' %}">Sign Up</a>
{% endif %}
<hr>
<div>
{% for image in images|slice:":2" %}
<div>
<img width="400px" height="300px" src="{{ image.image.url }}" alt="">
</div>
{% endfor %}
<button>Next two images</button>
</div>
<p>Likes: {{user_like}}</p>
</body>
</html>
Я буду очень признателен за любую помощь, которую вы можете мне оказать, как я могу сделать это и понять это, чтобы я знал, как сделать это правильно и научиться, спасибо заранее