Generi c подробный вид createjob должен вызываться с объектом pk или слагом в URLconf - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь создать представление, которое проверяет, находится ли пользователь в модели менеджера или нет. Это проверяет пользователя, если они включены, поэтому они смогут опубликовать задачу. Я создал вид в другом к этому. однако метод test_fun c не работает. Когда я создаю новое задание, оно выдает ошибку Generic detail view createjob must be called with either an object pk or a slug in the URLconf.. Я уже создал get_absolute_url в своей модели задания, чтобы вернуться к подробному виду. Кто-нибудь может мне помочь?

views.py:

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

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

    def test_func(self):
        return self.get_object().manager == self.request.user

urls.py:

urlpatterns = [
    path ('new/', createjob.as_view(),name='create-job'),
    path ('team/',teamview.as_view(), name='team-view'),
    path('<int:pk>/',jobdetail.as_view(),name='job-detail'),
    path ('created/',createdjobs.as_view(), name='create-job-manager'),
    path ('',jobs.as_view(),name='view-jobs')

Models.py:

from django.db import models
from profiles.models import User
from  django.urls import reverse
# 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.OneToOneField(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.OneToOneField(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

    def get_absolute_url(self):
        return reverse('job-detail',kwargs={'pk':self.pk})

ТИА

...