如何在 Django 3 中将当前活跃用户作为外键添加到任务模型中?



>我正在创建一个任务来使用 django 3 做 web 应用程序, 我有两个模型,一个是UserCustom,另一个是UserTask,每个相应的活动用户都可以在其中添加任务。 我通过"模型表格"获取条目详细信息。 要添加任务,用户需要登录。 但是在UserTask模型中提及UserCustom作为外键,会在"AddTask.html"页面上创建一个包含所有注册用户的组合(下拉(框。

如何在用户任务模型中自动添加当前活动用户作为外键?

以下是代码

models.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

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

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',{})

您可以使用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
...

最新更新