博客五部曲之一 - 简单博客


1615 浏览 5 years, 11 months

33 通过外键关联用户和帖子

版权声明: 转载请注明出处 http://www.codingsoho.com/

发帖时,每个帖子都应该是某一用户关联的 ,所以我们简单建立一个用户和帖子之间的连接

from django.conf import settings
class Post(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)

在创建视图里,自动将当期登陆用户保存为帖子用户

def post_create(request):
    if not request.user.is_staff or not request.user.is_superuser:
        raise Http404
    if not request.user.is_authenticated():
        raise Http404
    form = PostForm(request.POST or None, request.FILES or None)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.user = request.user
        instance.save()
        messages.success(request, "successfully created")
        return HttpResponseRedirect(instance.get_absolute_url())
    else:
        messages.error(request, "not successfully created")
    context = {
        'form':form
    }
    return render(request, 'post_form.html', context)

在创建视图一开始我们做了两个判断,除了之前的员工和超级用户之外,有时候我们也可以判断是否有授权。如果前面没有判断的话,直接分配用户的话,未登录用户创建帖子保存时将会报错

Cannot assign "<SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x036E5710>>": "Post.user" must be a "User" instance

在post_detail.html和post_list.html添加用户显示,加入下面语句。 User有两个字段First Name和Last Name,只有这两个值赋值之后,get_full_name才不会为空。

{% if instance.user.get_full_name %}
<p>Autho: {{instance.user.get_full_name}}</p>
{% endif %}

列表显示

详情显示