Попытка использовать объекты из совершенно другой модели с использованием внешнего ключа - PullRequest
0 голосов
/ 08 июня 2019

Поэтому я хочу назначить «Ранг» конкретным пользователям с внешним ключом (я создал модель для рангов с другими объектами, такими как изображение, описание и т. Д.).

Что я хочу сделатьиспользовать эти объекты из ранжированной модели и перенести их в мой шаблон.Так что, когда я назначу звание «Новичок» конкретному пользователю, он покажет все объекты из ранга, такие как изображение и описания.

Кто-нибудь может помочь?

Спасибо

Вот мои views.py

from .models import user as UserModel

def index(request):
    return render(request, 'pages/index.html')

def user(request, user_id):
    profile = get_object_or_404(UserModel, pk=user_id)
    context = {
        'profile' : profile,
    }
    return render(request, 'user/user.html', context)

Вот модель для рангов

from django.db import models


class Ranks(models.Model):
    rank_name = models.CharField(max_length=300)
    photo = models.ImageField(upload_to='photos/&Y/%m/%d/')
    description = models.TextField(blank=True)
    rank_points = models.IntegerField()
    rank_promotionss = models.IntegerField()
    def __str__(self):
        return self.rank_name

1 Ответ

0 голосов
/ 08 июня 2019

Это довольно просто - добавьте поле ForeignKey в свою модель пользователя:

class UserModel(models.Model):
...
    rank = models.ForeignKey(Ranks, on_delete=models.CASCADE,...)

, а затем используйте его в своем шаблоне, просто позвонив, например, profile.rank.rank_name

1 небольшой совет по оптимизации, в вашем методе user() добавьте столбец select_related:

def user(request, user_id):
    profile = get_object_or_404(UserModel.objects.select_related('rank'), pk=user_id)

или он будет выполнять дополнительные запросы для получения ранга

Еще один совет: держите названия ваших моделей в единственном числе, например, Rank вместо Ranks

...