[英]how to add current active user as foreign key to the task model in django 3?
我正在使用 django 3 創建一個任務來執行 web 應用程序,我有兩個模型,一個是 UserCustom,另一個是 UserTask,其中每個相應的活動用戶都可以添加任務。 我正在通過“模型表格”獲取條目詳細信息。 添加任務用戶需要登錄。 但是在 UserTask model 中提到 UserCustom 作為外鍵,會在“AddTask.html”頁面上創建一個包含所有注冊用戶的組合(下拉)框。
如何在 UserTask model 中自動添加當前活動用戶作為外鍵?
下面是代碼
模型.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')
視圖.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
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.