我正在创建一个非常简单的待办事项列表应用程序。每个用户都应该有一个具有基本 CRUD 功能的关联待办事项列表页面。这意味着用户 A 应该拥有与用户 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")
)
这是我的 2 个模板:
创建待办事项
<form action="" method="post">{% csrf_token %}
{{ form.name }}
<button type="submit" class="btn primary">Create →</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 %}
最佳答案
所以您只想为其添加访问控制?
- 将
ForeignKey
添加到auth.User
到您的 ToDos 模型 - 重写您的列表并创建 View 以手动执行它们的工作(您可以使用基于类的新 View 来实现您的目标,但您需要首先了解它们是如何工作的)
- 在 ListView 中添加查询集过滤器
- 向表单的
save()
提供commit=False
,为检索到的对象设置用户并手动保存
代码:
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}
)
此外,在 ListView 中添加按 request.user
进行过滤,我建议使用 @login_required
装饰器,以避免未经授权的用户添加任务。
关于python - Django 用户身份验证和呈现由该特定用户创建的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10239713/