簡體   English   中英

如何將當前活動用戶作為外鍵添加到 django 3 中的任務 model 中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM