Как выполнить запрос два поля многие ко многим в Django? - PullRequest
0 голосов
/ 07 августа 2020

# Я новичок в python веб-фреймворке Django. # models.py

class User(AbstractUser):
  is_employeer = models.BooleanField(default=False)
  is_jobseeker = models.BooleanField(default=False)
    



class allskill(models.Model):
    skills = models.CharField(max_length=200, blank=True, null=True)

    def __str__(self):
        return self.skills

    def get_absolute_url(self):
        return reverse('employee:post_job')



class jobseeker(models.Model):
    user = models.OneToOneField(User, on_delete = models.CASCADE, primary_key = True)
    phone_number = models.CharField(max_length=20)
    location = models.CharField(max_length=100)
    gender = models.CharField(max_length=20, choices=GENDER_CHOICE, default=GENDER_MALE)
    email = models.EmailField(default='ajay@gmail.com')
    jobseeker_skill = models.ManyToManyField(allskill)


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



class Employeer(models.Model):
    user = models.OneToOneField(User, on_delete = models.CASCADE, primary_key = True)
    company_name = models.CharField(max_length=50, default='company name')
    company_tel = models.CharField(max_length=20, default='01-56559565')
    phone_number = models.CharField(max_length=20)
    location = models.CharField(max_length=100)
    company_website = models.URLField(default="company.com")
    company_email = models.EmailField(default='company@gmail.com')
    conpany_type = models.CharField(max_length=200, choices=COMPANY_TYPE, default=TE)


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



class Job_Post(models.Model):
    job_title = models.CharField(max_length=200)
    job_descreption = models.TextField()
    user = models.ForeignKey(User, on_delete = models.CASCADE)
    job_post_date = models.DateField(default=timezone.now)
    required_skill = models.ManyToManyField(allskill)
    time = models.CharField(max_length=200, choices=time, default=FT)

    def __str__(self):
        return f"{self.user.username}'s {self.job_title}"

    def get_absolute_url(self):
        return reverse('employee:job_list', kwargs={'username':self.user})

# views.py

class joblist(ListView):
model = Job_Post
template_name = 'my_skill.html'
context_object_name = 'jobsforjobseekerskill'

def get_queryset(self):
    jobseeker = self.request.user.is_jobseeker
    jobseeker_skills = Job_Post.objects.filter(required_skill__pk__in = jobseeker.jobseeker_skill.values_list('pk', flat = True))
    print(jobseeker_skills)
    return jobseeker_skills

# возникла эта ошибка введите описание изображения здесь

вопрос

Это хороший способ написать код в хорошем стиле?

Как

после входа в систему как соискатель работы соискатель может показать вакансии, связанные только с его навыками. Как это сделать?

как правильно писать код?

1 Ответ

0 голосов
/ 07 августа 2020

Вы можете исправить свой код следующим образом:

def get_queryset(self):
    jobseeker = self.request.user.jobseeker  # as there is OneToOne relation between user and jobseeker
    # FYI please use PascalCase when defining name
    jobseeker_skills = Job_Post.objects.filter(required_skill__pk__in = jobseeker.jobseeker_skill.values_list('pk', flat = True))
    print(jobseeker_skills)
    return jobseeker_skills

Все, что вам нужно сделать, это связать is_jobseeker с jobseeker в коде.

Более чистым решением может быть это :

def get_queryset(self):
    return Job_Post.objects.filter(required_skill__jobseeker__user=self.request.user)

Я использую обратное отношение между allpost и jobseeker с отношением между Job_Post и all_post, чтобы получить набор запросов Job_Post.

...