1

私は非常にシンプルなやることリストアプリケーションを作成しています。各ユーザーには、基本的なCRUD機能を備えたToDoリストページが関連付けられている必要があります。つまり、ユーザーAはユーザーBとは異なるデータを持つ必要があります。

現在のところ、やることリストを誰が所有しているかについての区別はありません。ログインしている人は誰でも、タスクを追加、削除、表示、削除できます。

モデルとテンプレートに何か余分なものが必要になるかもしれないと直感しています。私はPinax0.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の私のフォームの1つです

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

これが私のテンプレートの2つです:

To-Do Create

 <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. ToDo モデルに追加ForeignKeyするauth.User
  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します。承認されていないユーザーによるタスクの追加を避けるために、decorator をお勧めします。

于 2012-04-20T03:48:06.363 に答える