2017-12-16 17 views
0

私はtodoウェブサイトを作成しようとしています。そのため、すべてのユーザーは自分のTodosのリストを持ちます。しかし、それはすべてのユーザに同じリストを表示しており、また、他のユーザは編集したり、削除したり、すべてのユーザに再び見えるtodoリストに追加することができます。Djangoで異なるユーザー向けに異なるモデルデータベースを作成するには

models.py

from django.db import models 
from django.contrib.auth import get_user_model 
from django.conf import settings 


class todo (models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete="models.CASCADE") 
    todo_topic = models.CharField (max_length = 50) 
    todo_description = models.TextField(max_length=100) 
    todo_date = models.DateTimeField(null = True) 
    date_added = models.DateTimeField(auto_now = True,) 
    completed_or_not = models.CharField(choices=(('Done', 'Done'), ('Not Done', 'Not Done')), default = 'Not Done', max_length=10) 

views.py

from django.shortcuts import render 
from .models import todo 
from .forms import addTodo_form, edit_form 
from django.contrib.auth.models import User 
from django.http import HttpResponseRedirect 
from django.urls import reverse 
from django.contrib.auth.decorators import login_required 

def dashboard(request): 
    if request.user.is_authenticated: 
     todo_list = todo.objects.order_by('-date_added') 
     template = 'customers/dashboard.html' 
     return render (request, template, {'todo_list' : todo_list}) 
    else : 
     return render (request, 'customers/home.html') 

@login_required 
def addTodo(request): 
    if request.method == 'POST' : 
     form = addTodo_form(request.POST) 
     if form.is_valid(): 
      topic = form.cleaned_data['topic'] 
      des = form.cleaned_data['description'] 
      date = form.cleaned_data['todo_date'] 
      #user = User.objects.get(username=request.user.username) 
      user=request.user 
      gta = user.todo_set.create(todo_topic = topic, todo_description = des, todo_date = date) 
      message = 'Item Added To Your Todo List' 
      return render(request, 'customers/add.html', {'form' : form, 'msg' : message}) 
    else : 
     form = addTodo_form() 
    return render(request, 'customers/add.html', {'form' : form}) 

@login_required 
def showForm(request, id): 
    a = todo.objects.get(pk=id) 
    data_dict = {'topic' : a.todo_topic, 'description' : a.todo_description, 'todo_date' : a.todo_date, 'completed_or_not' : a.completed_or_not} 
    form = edit_form(initial = data_dict) 
    return render(request, 'customers/edit.html', {'form' : form, 'date_added' : a.date_added}) 

@login_required 
def edit(request, date_added): 
    if request.method == 'POST': 
     form = edit_form(request.POST) 
     if form.is_valid(): 
      topic = form.cleaned_data['topic'] 
      des = form.cleaned_data['description'] 
      date = form.cleaned_data['todo_date'] 
      status = form.cleaned_data['completed_or_not'] 
      instance = todo.objects.get(date_added = date_added) 
      instance.todo_topic = topic 
      instance.todo_description = des 
      instance.todo_date = date 
      instance.completed_or_not = status 
      instance.save(update_fields=['todo_topic', 'todo_description', 'todo_date', 'completed_or_not']) 
      message = 'Updated' 
      return HttpResponseRedirect(reverse ('dashboard')) 

@login_required 
def delete(request, id): 
    todo.objects.get(pk=id).delete() 
    return HttpResponseRedirect(reverse('dashboard')) 

forms.py

from django import forms 

class SignUpForm(forms.Form): 
    first_name = forms.CharField(max_length = 20, label = 'First Name', required = True) 
    last_name = forms.CharField(max_length = 20, label = 'Last Name', required = True) 

    def signup(self, request, user): 
     user.first_name : self.cleaned_data['first_name'] 
     user.last_name : self.cleaned_data['last_name'] 
     user.save() 

class addTodo_form(forms.Form): 
    topic = forms.CharField(label = 'Topic', max_length=50, required = True) 
    description = forms.CharField(widget=forms.Textarea, label = 'Description', max_length=100) 
    todo_date = forms.DateField (label = 'Date', widget=forms.SelectDateWidget) 


class edit_form(forms.Form): 
    topic = forms.CharField(label = 'Topic', max_length=50, required = True) 
    description = forms.CharField(widget=forms.Textarea, label = 'Description', max_length=100) 
    todo_date = forms.DateField (label = 'Date', widget=forms.SelectDateWidget) 
    completed_or_not = forms.ChoiceField(choices = (
              ('Done', 'Done'), 
              ('Not Done', 'Not Done'), 
              )) 

Project_Directory

project_directory 
├───static 
│ ├───media 
│ ├───static 
│ │ ├───css 
│ │ └───js 
│ └───static-only 
│  ├───admin 
│  │ ├───css 
│  │ │ └───vendor 
│  │ │  └───select2 
│  │ ├───fonts 
│  │ ├───img 

│  │ │ └───gis 
│  │ └───js 
│  │  ├───admin 
│  │  └───vendor 
│  │   ├───jquery 
│  │   ├───select2 
│  │   │ └───i18n 
│  │   └───xregexp 
│  ├───css 
│  └───js 
└───todo_website 
    ├───customers 
    │ ├───migrations 
    │ │ └───__pycache__ 
    │ ├───templates 
    │ │ ├───account 
    │ │ └───customers 
    │ └───__pycache__ 
    └───todo_website 
     └───__pycache__ 

は、問題は、私はUSER1でログインしてToDoリストを作成し、私がログアウトし、です。もう一度、user2でログインしました。そこにuser1によって作成されたリストがすでに表示されています。 新しいアカウントを作成してログインしても、user1によって作成されたリストがそこに存在します。

+0

すべてのオブジェクトを取得しているためです。ユーザーによってtodosをフィルタリングします。 –

+0

ありがとうございました。それは動作します... yaayyy –

+0

私は答えとしてこれを投稿しています。 –

答えて

0

すべてのオブジェクトを取得しています。ユーザーによってtodosをフィルタリングし、そのユーザーによって作成されたものだけを表示します。

todo_list = todo.objects.filter(user=request.user).order_by('-date_added') 
関連する問題