1

我正在创建一个非常简单的待办事项列表应用程序。每个用户都应该有一个具有基本 CRUD 功能的关联待办事项列表页面。这意味着User A应该具有与User B不同的数据。

到目前为止,谁拥有待办事项列表没有区别。任何登录的人都可以添加、删除、显示、删除任务。

我有一种直觉,我可能需要在我的模型和模板中添加一些额外的东西。我应该提到我使用的是 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")
    )

这是我的两个模板:

待办事项创建

 <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 %}
4

1 回答 1

3

所以你只想给它添加访问控制?

  1. 添加ForeignKeyauth.User您的 ToDos 模型
  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装饰器来避免非授权用户添加任务。

于 2012-04-20T03:48:06.363 回答