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によって作成されたリストがそこに存在します。
すべてのオブジェクトを取得しているためです。ユーザーによってtodosをフィルタリングします。 –
ありがとうございました。それは動作します... yaayyy –
私は答えとしてこれを投稿しています。 –