2012-04-20 80 views
1

我正在创建一个非常简单的待办事项列表应用程序。每个用户都应该有一个关联的待办事项列表页面,其中包含基本的CRUD功能。这意味着用户A应该有不同于用户B的数据。Django用户验证和渲染由该特定用户创建的内容?

截至目前,关于谁拥有待办事项清单并无区别。任何登录的人都可以添加,删除,显示,删除任务。

我有一种直觉,我可能需要额外的东西在我的模型和我的模板。我应该提到我使用Pinax 0.9a2。如果它符合我的需求,我宁愿使用该解决方案。

这里是我的models.py

class Task(models.Model): 
    name = models.CharField(max_length=100) 
    added_at = models.DateTimeField(auto_now_add=True) 
    last_update = models.DateTimeField(auto_now=True) 

    def __unicode__(self): 
     return self.name 

这里是我的一种形式在views.py

def task_create(request): 
    return create_object(request, 
     model=Task, 
     template_name='task_create.html', 
     post_save_redirect=reverse("todo_list") 
    ) 

这里是我的模板2:

待办事项Cre吃

<form action="" method="post">{% csrf_token %} 
     {{ form.name }} 
     <button type="submit" class="btn primary">Create &rarr;</button> 
    </form> 

待办事项列表

{% if task_list %} 
    <p><a href="{% url task_create %}">Create a task</a></p> 
    <ul> 
    {% for task in task_list %} 
     <li><a href="{% url task_detail task.id %}">{{ task.name }}</a></li> 
    {% endfor %} 
    </ul> 
    {% else %} 
     <p>No tasks to display, click to <a href="{% url task_create %}">create new</a>.</p> 
    {% endif %} 

回答

3

所以,你只是想访问控制补充呢?

  1. auth.User加入ForeignKey到你的待办事项模型
  2. 重写你的清单,创建视图,使手动他们的工作(你可以实现与新的基于类的观点你的目标,但你要明白,他们首先的工作怎么办)
  3. 用于查询集添加筛选器列表视图
  4. 提供commit=False为检索对象表单的save(),建立用户和手动保存它

代码:

class Task(models.Model): 
    user = models.ForeignKey('auth.User') 
    name = models.CharField(max_length=100) 
    added_at = models.DateTimeField(auto_now_add=True) 
    last_update = models.DateTimeField(auto_now=True) 

class TaskForm(forms.ModelForm): 
    class Meta: 
     model = Task 
     exclude = ['user', ] 

def task_create(request): 
    form = TaskForm(data=request.POST or None) 
    if request.method == 'POST' and form.is_valid(): 
     task = form.save(commit=False) 
     task.user = request.user 
     task.save() 
     return reverse("todo_list") 
    return render(request, 
     'task_create.html', 
     {'form': form} 
    ) 

此外,在列表视图通过request.user添加过滤和我建议@login_required装饰,以避免非授权用户添加任务。

+0

你能提供一个上面的代码的例子吗? – 2012-04-23 01:03:50

+1

author = models.Foreignkey(User)https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey – 2012-04-23 04:52:11

+0

新增'create'示例 – ilvar 2012-04-23 15:16:46