Создание рекомендательной системы на основе значений в шаблоне Django

Я пытаюсь создать рекомендательную систему в Django, где я получаю пользователя с самым высоким rating. Рейтинг связан с пользователем как Foreign-Key, как показано в коде ниже:

models.py

class Bid(models.Model):
    project = models.ForeignKey(
        ProjectOrder, default="null", on_delete=models.CASCADE)
    made_by = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        null=True,
        blank=True,
        default="null",
        on_delete=models.CASCADE
    )
    date = models.DateField(auto_now_add=True)
    assign = models.BooleanField(default=False)

    def __str__(self):
        return self.project.title + " - " + self.made_by.username

    class Meta:
        ordering = ['-date']


class Rating(models.Model):
    username = models.ForeignKey(User, on_delete=models.CASCADE)
    score = models.IntegerField(default=0, validators=[
                                    MaxValueValidator(5),
                                    MinValueValidator(0),
                                ])
    review = models.TextField(max_length=250, blank=True, null=True)
    reviewed_by = models.ForeignKey(User, on_delete=models.CASCADE, 
                                          blank=True, 
                                          null=True, 
                                          related_name="reviewed_by")

    def __str__(self):
        return str(self.username)

Шаблон

{% for bid in client_bids_assign %}
        <div
          class="p-2 my-2 d-fle"
          style="
            border-radius: 10px;
            gap: 10px;
            box-shadow: 0 0.5px 2px rgba(128, 128, 128, 0.651);
          "
        >
          <small id="">
            <p class="badge bg-info">{{ bid.made_by }}</p>
            <!-- star rating -->
            <fieldset class="starability-result mx-auto" data-rating="{{rating}}">
              Rated: {{rating}} stars
            </fieldset>
            <p class="text-muted">{{ bid.date }}</p>
          </small>
          <form method="POST">
            {% csrf_token %}
            <fieldset class="d-none">
              <input type="text" name="bidId" id="bidId" value="{{ bid.id }}" />
            </fieldset>
            {% if bid.assign is False %}
            <button
              class="btn btn-sm btn-outline-success"
              type="submit"
              value="{{ bid.id }}"
            >
              Assign <i class="fa fa-check-circle"></i>
            </button>
            {% else %}
            <button
              class="btn btn-sm btn-outline-danger"
              type="submit"
              value="{{ bid.id }}"
            >
              Un-assign <i class="fa fa-exclamation-circle"></i>
            </button>
            {% endif %}
          </form>
        </div>
        {% endfor %}

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

Views.py

#get the rating for user in the bid
def get_rating():
    for bid in client_bids_assign:
    user = bid.made_by # I would like this to come from the bid in the template
    rating = user.rating_set.all()

    agg = 0
    count = 0
    for rating in rating:
        agg = agg + rating.score
        count += 1
        rating = agg/count
    return rating

Моя проблема в том, что я не могу заставить пользователя, который подал заявку из шаблона, быть пользователем в представлении, чей рейтинг я хочу получить. Я также пробовал выполнять математические операции в шаблоне, но это не лучшая практика, и это, кажется, ломает шаблон, т.е. parse error. Примечание: Ставка в шаблоне перебирает все текущие сделанные ставки

Заранее спасибо.

Вернуться на верх