为什么我无法访问Django用户“状态”

时间:2017-09-19 07:14:49

标签: python html django

我无法显示自定义对象“状态”。我可以填写它并在我的管理员中查看。但是,当我尝试用HTML获取它时,它不起作用。但它会显示用户名,姓氏等。

这是我的model.py(在帐户中):

from django.contrib.auth import models as authmodels

class UserZ(authmodels.User,authmodels.PermissionsMixin):
    status = models.CharField(max_length=100, blank=True)
    avatar = models.ImageField(upload_to='images/avatar', null=True, blank=True,default='/static/img/Weramemesicon.png')

    def __str__(self):
        return self.username

model.py(在帖子中)

User = get_user_model()

class Post(models.Model):
    user = models.ForeignKey(User,related_name='posts')
    # ...

html代码:

注意:{{post_user.username}}工作正确。

{% block prepost %}
    <h1>{{post_user.username}}'s Memes</h1>
    {%if user.is_authenticated %}
        <a href="{%url 'settings'%}"><p>Einstellungen<p/></a>
    {% endif %}
    {{ post_user.status }}
{% endblock %}

我的views.py(在帖子中):

class UserPosts(generic.ListView):
    model = models.Post
    template_name = "posts/user_post_list.html"
    def get_queryset(self):
        try:
            self.post_user = User.objects.prefetch_related("posts").get(
                username__iexact=self.kwargs.get("username")
            )
        except User.DoesNotExist:
            raise Http404
        else:
            return self.post_user.posts.all()

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["post_user"] = self.post_user
        return context

它应该显示:

PeterPan2's Memes

Einstellungen

Some Status

4 个答案:

答案 0 :(得分:2)

因为您的外键是User,而不是UserZ。

您不应该像这样扩展用户模型。 UserZ应该是AbstractUser的子类,而不是具体的User类。您还应该将AUTH_USER_MODEL设置设置为应用和型号名称 - 例如&#34; MyApp.UserZ&#34; - 来自Post的外键应指向该设置,而不是该类。

答案 1 :(得分:0)

您通过继承django的内置UserZ模型创建了新模型User。但是,您尚未将模型定义为AUTH_USER_MODELAUTH_USER_MODEL可能仍为django.contrib.auth.models.User

您可能需要将AUTH_USER_MODEL中的默认settings.py选项更改为自定义用户模型。然后,您可以访问status对象中的User字段,例如request.user.status。但是,除非您尚未将模型定义为AUTH_USER_MODEL,否则无法从status对象访问request.user字段。

答案 2 :(得分:0)

我猜您从Post model发送views.pypost_user密钥作为User密钥。 由于帖子模型将ForeignKey模型包含为{{post_user.username}},因此clVorfahr.CkeckedItems工作正确。

但是帖子模型与UserZ没有关联,所以它不起作用。

答案 3 :(得分:0)

您的外键与User型号相关。所以.username会奏效。有一点是将外键设为UserZ或执行

{{ post_user.userz.status }}