我在django的学习阶段。我只是潜入一个项目来学习框架,并在整个过程中遇到一系列问题。
我基本上希望为创建任务列表的用户提供单独的页面,并让他们将任务发布到他们自己的页面。
来自django.db导入模型 来自django.contrib.auth.models导入用户
# Create your models here.
class UserProfile(models.Model):
# This line is required. Links UserProfile to a User model instance.
user = models.OneToOneField(User)
# The additional attributes we wish to include.
website = models.URLField(blank = True)
# Override the __unicode__() method to return out something meaningful!
def __unicode__(self):
return self.user.username
class TaskItem(models.Model):
taskn = models.CharField(max_length = 400)
usern = models.ForeignKey(User)
在我的模板中,如果用户输入了他们的任务,我该如何调用它来渲染到页面上?
def profile_page(request, username):
user = User.objects.get(username=username)
taskitems = user.taskn_set.all()
return render_to_response('profile.html', {}, context)
当前问题:
'User' object has no attribute 'taskn_set'
答案 0 :(得分:1)
{{ request.user.taskitem_set.all }}
会为您提供所有相关的任务项。现在,要在模板中显示它:
{% for task_item in user.taskitem_set.all %}
{{ task_item.task_n }}
{% endfor %}
将显示任务列表。
以下是reverse-queries on foreign key (related_name)的文档,read this
答案 1 :(得分:0)
{% for task in user.taskitem_set.all %}
{{ task.task_n }}
{% endfor %}
这将获取与您的用户相关的所有TaskItem实例。 (注意额外的数据库查询)
虽然我不知道您的视图是如何工作的,但我会假设您正在进行正确的检查,以确保每个用户只能看到自己的任务。
你会发现最有用的一个性能技巧是使用prefetch_related('taskitem_set'),只要你的UserProfile实例有一个查询就会预取TaskItem实例:
user = User.objects.filter(id=user_id).prefetch_related('taskitem_set')
您可以调整代码以符合您的偏好。
希望这有帮助!