【问题标题】:Check if user is in the manager column in order to create a post/task检查用户是否在经理列中以创建帖子/任务
【发布时间】:2020-03-11 05:41:15
【问题描述】:

我在 DJango 学习,我从文档和 StackOverflow 中学到了很多东西。现在,我有点卡住了,我只想知道我可以在基于类的视图中检查谁,如果用户在工作模型的经理列中/它也可以在经理模型中,这也很好。

我尝试使用UserPassesTestMixin来检查用户是否参与其中,但我收到Generic detail view createjob must be called with either an object pk or a slug in the URLconf.的错误

我只需要有人指出我正确的方向或给我一个提示。我也试过了,这个:

class createjob (LoginRequiredMixin,CreateView):
    model = Job
    fields = ['member','title', 'description', 'file']

    def form_valid(self,form):
        form.instance.manager=self.request.user
        return super().form_valid(form)

但它给了我Cannot assign "<SimpleLazyObject: <User: edlabra>>": "Job.manager" must be a "Manager" instance.的错误

这是我的观点.py:

from django.shortcuts import render
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.views.generic import ListView, CreateView
from .models import Job, Member
from profiles.models import User
from django.contrib.auth.decorators import login_required
# Create your views here.


class jobs(LoginRequiredMixin,ListView):
    model = Job
    template_name = 'users/user_jobs.html'
    context_object_name = 'jobs'

    def get_queryset(self):
        return Job.objects.filter(member__member=self.request.user)


class createdjobs(LoginRequiredMixin,ListView):
    model = Job
    template_name = 'users/manager_jobs.html'
    context_object_name = 'jobs'

    def get_queryset(self):
        return Job.objects.filter(manager__manager=self.request.user)


class teamview(LoginRequiredMixin,ListView):
    model = Member
    template_name = 'users/manage_team.html'
    context_object_name = 'members'

    def get_queryset(self):
        return Member.objects.filter(manager__manager=self.request.user)



class createjob (LoginRequiredMixin,UserPassesTestMixin,CreateView):
    model = Job
    fields = ['member','title', 'description', 'file']

    def test_func(self):
        job=self.get_object()
        if self.request.user == Job.manager:
            return True
        return False

模型.py:

from django.db import models
from profiles.models import User
# Create your models here.

class Points (models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    points = models.IntegerField(default=0, null=False)

    def __str__(self):
        return self.user.username

class Profile (models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    image = models.ImageField(default='default.png',upload_to='profile_pics')


    def __str__(self):
        return f'{self.user.username}Profile'


class Manager (models.Model):
    name = models.CharField(max_length=30, blank=True, null=True)
    manager = models.ForeignKey(User,on_delete=models.CASCADE)

    def __str__(self):
        return self.name

class Member (models.Model):
    name = models.CharField(max_length=30, blank=True, null=True)
    manager = models.ForeignKey(Manager, on_delete=models.CASCADE)
    member = models.ForeignKey(User,on_delete=models.CASCADE)

    def __str__(self):
        return self.name

class Job (models.Model):
    manager = models.ForeignKey(Manager, on_delete=models.CASCADE)
    member = models.ForeignKey(Member, on_delete=models.CASCADE)
    title = models.CharField(max_length=30, blank=False, null=False)
    description = models.TextField()
    datePosted = models.DateTimeField (auto_now = True)
    file = models.FileField(null=True, blank=True,upload_to='job_files')

    def __str__(self):
        return self.title

【问题讨论】:

    标签: python django django-views mixins


    【解决方案1】:

    从经理表中分配用户。

    def form_valid(self,form):
            form.instance.manager=Manager.objects.get(manager=self.request.user)
            return super().form_valid(form)
    

    【讨论】:

    • 这会让用户现在成为经理模型的一部分,还是会检查用户是否已经存在于模型中?
    • 好的,我试了代码,但它告诉我(1048,“列'manager_id'不能为空”),我尝试的用户是经理模型的一部分
    猜你喜欢
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 2018-01-16
    • 2011-11-21
    相关资源
    最近更新 更多