Как ссылаться на модель через модель User в Django?

So I have two models -- UserInfo model, which references Django's built-in User model, and Article model, written by each user, as below.

class UserInfo(models.Model):
    objects = models.Manager()
    this_user = models.OneToOneField(User, on_delete=models.CASCADE, related_name = 'userinfo', null=True, default=None)
    real_name = models.CharField(max_length=20, blank=False)

class Article(models.Model):
    objects = models.Manager()
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name = 'article', null=True, default=None)
    body = models.CharField(max_length=20, blank=False)

А вот часть моего views.py.

def create_ans_us(request):
    current_article = Article.objects.get(id=1)
    ...
    context = {
        'current_article' : current_article,
    }
    return render(request, 'main/main.html', context)

And in Django template tag, I'm trying to render the real_name field in UserInfo like below.

<html>
...
{{current_article.user_id.real_name}}
</html>

Очевидно, что я хочу вывести поле real_name в шаблон. Как мне сделать это возможным? Заранее спасибо. :)

Вы должны следовать author из current_article, так:

{{ current_article.author.userinfo.real_name }}

Это приведет к дополнительному вызову базы данных. Вы можете получить данные об авторе в запросе , где вы получаете объект с помощью .select_related(…) [Django-doc]:

from django.shortcuts import get_object_or_404

def create_ans_us(request):
    current_article = get_object_or_404(
        Article.objects.select_related('author', 'author__userinfo'),
        id=1
    )
    …
    context = {
        'current_article' : current_article,
    }
    return render(request, 'main/main.html', context)
Вернуться на верх