Проверьте, находится ли пользователь в столбце менеджера, чтобы создать сообщение / задачу - PullRequest
0 голосов
/ 11 марта 2020

Я учусь на 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.

Вот мои views.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

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

1 Ответ

0 голосов
/ 11 марта 2020

назначить пользователя из таблицы менеджера.

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