[英]how to add current active user as foreign key to the task model in django 3?
I am creating a task to do web app using django 3, I have two models one is UserCustom and other is UserTask in which each corresponding active user can add task.我正在使用 django 3 创建一个任务来执行 web 应用程序,我有两个模型,一个是 UserCustom,另一个是 UserTask,其中每个相应的活动用户都可以添加任务。 I am getting the entry details through a "model form".
我正在通过“模型表格”获取条目详细信息。 For adding the task user need to be login.
添加任务用户需要登录。 But mentioning UserCustom as foriegn key in UserTask model, creates a combo (dropdown) box on the "AddTask.html" page with all the registered users.
但是在 UserTask model 中提到 UserCustom 作为外键,会在“AddTask.html”页面上创建一个包含所有注册用户的组合(下拉)框。
How can i autimatically add current active user as foreign key in UserTask model?如何在 UserTask model 中自动添加当前活动用户作为外键?
Below are the codes下面是代码
models.py模型.py
from django.db import models
from django.contrib.auth.models import User
from django.conf import settings
# Create your models here.
class UserCustom(models.Model):
user=models.OneToOneField(User,on_delete=models.CASCADE)
profile_pic=models.ImageField(upload_to='profile_pics',blank=True)
def __str__(self):
return self.user.username #user os object defined above
class UserTask(models.Model):
author = models.ForeignKey(UserCustom,on_delete=models.CASCADE)
label=models.CharField(max_length=264)
date=models.DateField()
status=models.BooleanField(default=False)
def __str__(self):
return str(self.label)
forms.py forms.py
from django import forms
from django.forms.fields import DateField
from django.contrib.auth.models import User
from taskApp.models import UserCustom,UserTask
from django.contrib.admin.widgets import AdminDateWidget
class UserForm(forms.ModelForm):
password=forms.CharField(widget=forms.PasswordInput())
class Meta():
model=User
fields=('username','email','password')
class UserCustomForm(forms.ModelForm):
class Meta():
model=UserCustom
fields=('profile_pic',)
class UserTaskForm(forms.ModelForm):
date=DateField(widget=forms.DateInput(attrs={'placeholder': 'YYYY-MM-DD', 'required': 'required'}))
class Meta():
model=UserTask
fields=('author','label','status','date')
views.py视图.py
from django.shortcuts import render
from taskApp.forms import UserForm,UserCustomForm,UserTaskForm
#below libraries required for login
from django.contrib.auth import authenticate,login,logout
from django.http import HttpResponseRedirect,HttpResponse
from django.urls import reverse
from django.contrib.auth.decorators import login_required
# Create your views here.
def index(request):
return render(request,'taskApp/index.html')
@login_required
def add_task(request):
#return HttpResponse("You are logged in, Nice!")
added=False
if request.method == "POST":
task_form=UserTaskForm(data=request.POST)
if task_form.is_valid():
task=task_form.save()
#task.user=user
task.save()
added=True
else:
print(task_form.errors)
else: #no request=POST yet
task_form=UserTaskForm()
return render(request,'taskApp/task.html',{'added':added,'task_form':task_form})
@login_required
def user_logout(request): #only login users can logout
logout(request)
return HttpResponseRedirect(reverse('index'))
def register(request):
registered=False
if request.method == "POST":
user_form=UserCustomForm(data=request.POST)
profile_form=UserProfileInfoForm(data=request.POST)
if user_form.is_valid() and profile_form.is_valid():
#grabbing user form ,saving to DB and hashing the password and then saving the changes
user=user_form.save()
user.set_password(user.password)
user.save()
profile=profile_form.save(commit=False)
profile.user=user
if 'profile_pic' in request.FILES:
profile.profile_pic=request.FILES['profile_pic']
profile.save()
registered=True
else:
print(user_form.errors,profile_form.errors)
else: #no request=POST yet
user_form=UserCustomForm()
profile_form=UserProfileInfoForm()
return render(request,'taskApp/registration.html',
{'user_form':user_form,
'profile_form':profile_form,
'registered':registered })
def user_login(request):
if request.method=='POST':
username=request.POST.get('username') #name of element
password=request.POST.get('password')
user=authenticate(username=username,password=password)
if user:
if user.is_active:
login(request,user)
return HttpResponseRedirect(reverse('index')) #redirect to home page
else:
return HttpResponse("ACCOUNT NOT ACTIVE")
else:
print("Someone tried to login and failed!")
print("Username: {} and password {}".format(username,password))
return HttpResponse("invalid login details supllied!")
else:
return render(request,'taskApp/login.html',{})
You can access the current user with request.user
.您可以使用
request.user
访问当前用户。
...
if request.method == "POST":
task_form=UserTaskForm(data=request.POST)
if task_form.is_valid():
task=task_form.save(commit=False)
task.author= request.user
task.save()
added=True
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.