Models.py для системы рекомендаций - PullRequest
0 голосов
/ 08 февраля 2019

Мое веб-приложение отображает список фильмов, взятых из файла JSON в формате загрузочной карты. Каждая отдельная карта существует для каждого фильма.Мне нужно взять пользовательский рейтинг (1-5) для n фильмов от пользователя, значение по умолчанию равно 0, если пользователь не оценивает его.

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

my views.py выглядит так:

from django.shortcuts import render
import requests
import json
from .models import *
from . import forms
def list(request):
        movies_data=open('movies.json').read()
        movies = json.loads(movies_data)
        return render(request, 'home.html', {'movies' : movies})

мой дом.HTML выглядит так:

    {% extends 'base.html' %}

{% block content %}
    <div class="jumbotron jumbotron-fluid">
    <div class="container">
    <center> <h1 class="display-3">Welcome to Movie Finder!</h1>
    <p class="lead"> Your one-stop and best recommender of movies.</p></center>


            <div class ="container">
            <div class="row">
            {% for movie in movies %}
            <div class="col-sm-3 col-lg-3">
            <div class="card h-8">
            <div class="card-group">

                <div class="card text-center" style="width:20rem;">
                <img class="card-img-top" src="{{movie.img_url}}" alt="Card image cap">
                <div class="card-body">
                <h5 class="card-title">{{movie.title}}</h5>
                <h5 class="card-title">Rating : {{movie.users_rating}}</h5>
                <h5 class="card-title">Year : {{movie.year}}</h5>
                <p class="card-text"><h5>Description:</h5> {{movie.description|truncatewords:10}} </p>
                <br></br
                <a href="{{movie.imdb_url}}" class="btn btn-dark">Explore</a>
            </div>
        </div>
            </div>
        </div>
    </div>

    {% endfor %}
</div>
</div>

{% endblock %}

Каким должен быть мой models.py и процедура ввода данных?Я много гуглил, но не смог дойти до конца.Может кто-нибудь помочь, пожалуйста?

1 Ответ

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

Я не совсем понимаю ваш вопрос, но для моделей, поддерживающих ваши требования: Обратите внимание, что я использую Client, а не User, потому что User - это модель по умолчанию для django, которую вы также можете использовать, и она весьма полезна.для обработки логинов и сеансов Проверьте это здесь

from django.db import models

class Client(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    ...

class Movie(models.Model):
    movie_name = models.CharField(max_length=30)
    ...

class Rating(models.Model):
    user = models.ForeignKey(Client, on_delete=models.CASCADE )
    movie = models.ForeignKey(Movie, on_delete=models.CASCADE )
    rate = models.IntegerField(default=0)

Имея модели, вам нужно добавить форму в home.html .. это означает

  • Добавление нового пути к вашему url.py
  • Создание функции для получения и сохранения данных в вашем views.py
  • Добавьте входные данные формы в ваш home.html

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

url.py

(...),
# must have the <int:user> to receive the pk of the user
path('^home/<int:user>/rating/$', views.rating, namespace='rating'),

views.py

def rating(request, user):
    base_context = {'request': request}
    if (request.method == 'POST'):
        # access to the POST data, as you want N movies, you could name them movieX with X been a number, you should do a loop here to iterate. Im making a one case only
        movie = int(request.POST['movie1'])
        rating = request.POST['rating1']
        # Check if rating exists
        try:
            r = Rating.objects.get(user.pk=user, movie.pk=movie)
        except:
            r = Rating()
        r.rating = int(rating)
        r.save()
    return redirect('appname:home')

home.html

Это простая форма , смотрите здесь

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