Как получить доступ к расширенным атрибутам пользователя в шаблоне django - PullRequest
0 голосов
/ 28 октября 2018

Я пытаюсь получить доступ к расширенному полю модели пользователя в шаблоне Django, но он не работает, есть мои файлы: models.py:

class Author(models.Model):
    user = models.OneToOneField(User, related_name='user', on_delete=models.SET_NULL, null=True)
    bio = models.TextField(
        max_length=1400, help_text="Enter author biography.")

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

    def create_profile(sender, **kwargs):
        user = kwargs["instance"]
        if kwargs["created"]:
            user_profile = Author(user=user, bio='my bio')
            user_profile.save()
    post_save.connect(create_profile, sender=User)

шаблон:

{% extends "base_generic.html" %}
{% block title %}
<title>Author {{user}}</title>
{% endblock %}
{% block content %}
  <h1>{{user}}</h1>
  <h2>Bio:</h2>
  <p>{{user.author.bio}}</p>
  <div>
    {%for item in user.author.blogs_set.all%}
    <p>{{item.title}}</p>
    <hr> 
    {%endfor%}
  </div>

{% endblock %}

просмотров:

class UserDetailView(generic.DetailView):
    model = User
    template_name = 'blogapp/user_detail.html'

Я хочу получить доступ к биополе через user.author.bio, но ничего не отображается. Я также пробовал user.bio Есть ли какой-нибудь хитрый способ получить доступ к этому полю?

1 Ответ

0 голосов
/ 28 октября 2018

Вы устанавливаете related_name в:

class Author(models.Model):
    user = models.OneToOneField(
        User,
        <b>related_name=<s>'user'</s></b>,
        on_delete=models.SET_NULL, null=True
    )

Но related_name - это имя для доступа к связанному Author из User объекта (поэтому имя отношения в 1010 * обратная *).Таким образом, вы должны установить его на author (или оставить его пустым), например:

class Author(models.Model):
    user = models.OneToOneField(
        User,
        <b>related_name='author'</b>,
        on_delete=models.SET_NULL, null=True
    )

Установив его на user, вы могли бы получить доступ к объекту Author с помощью user.user, ноЯ настоятельно советую , а не , чтобы сделать это, так как в конечном итоге это приведет только к коду, который трудно понять.Для Django это, конечно, не имеет значения (если нет двух отношений, начинающихся с User, имеющих одинаковое имя), но для программистов это создает неправильное впечатление.

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