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