简体   繁体   English

如何将当前活动用户作为外键添加到 django 3 中的任务 model 中?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM