Сравнить объекты в views.py двух разных моделей в Django

Я пытаюсь сравнить 2 объекта (навыки вакансии, такие как веб-разработка, маркетинг и т.д., с теми же навыками зарегистрированного пользователя), если они совпадают, то отображается вакансия.

Целью является отображение нескольких вакансий, соответствующих запросу пользователя. В настоящее время jobmatch.html не отображает никаких вакансий.

Спасибо, что нашли время!!!

views.py

from apps.job.models import Job
from apps.userprofile.models import User_profile

def match_jobs(request):
    match_jobs = {}
    for job in Job.objects.all():
        if job.product_management == User_profile.product_management:
            match_jobs['product management'] = job
        elif job.web_development == User_profile.web_development:
            match_jobs['web development'] = job
        elif job.user_experience == User_profile.user_experience:
            match_jobs['user experience'] = job
        elif job.marketing == User_profile.marketing:
            match_jobs['marketing'] = job
        elif job.finance == User_profile.finance:
            match_jobs['finance'] = job

    return render(request, 'jobmatch.html', match_jobs)

Job.models.py

class Job(models.Model):
    title = models.CharField(max_length=255)    
    location = models.CharField(max_length=255, blank=True, null=True)
    description = models.TextField()
    requirements = models.TextField(blank=True, null=True)
    product_management = models.BooleanField(default=False)
    web_development = models.BooleanField(default=False)
    user_experience = models.BooleanField(default=False)
    marketing = models.BooleanField(default=False)
    finance = models.BooleanField(default=False)

User.models.py

class User_profile(models.Model):
    user = models.OneToOneField(User, related_name='userprofile', on_delete=models.CASCADE)
    is_employer = models.BooleanField(default=False)
    resume = models.ImageField(default='default.jpg', upload_to='resume')
    full_name = models.CharField(max_length=255, default='Enter full name')
    relevant_background = models.TextField()
    product_management = models.BooleanField(default=False)
    web_development = models.BooleanField(default=False)
    user_experience = models.BooleanField(default=False)
    marketing = models.BooleanField(default=False)
    finance = models.BooleanField(default=False)

jobmatch.html

            {% for job in match_jobs %}
                <div class="colum is-4">
                    <div class="card">
                        <div class="card-content">
                            <div class="media">
                                <div class="media-content">
                                    <p class="title is-4">{{ job.title }}</p>
                                    <p class="subtitle is-6">{{ job.created_at }}</p>
                                </div>
                            </div>

                            <div class="content">
                                {{ job.location }}

                                <br>

                                <a href="{% url 'job_detail' job.id %}">View</a>
                            </div>
                        </div>
                    </div>
                </div>
            {% endfor %}

Теперь у вас есть итерация по ключам диктанта. Вы должны сделать что-то вроде: {% for job in match_jobs.values %} или {% for job_identifier, job in match_jobs.items %}

Вы можете создать модель Skill для создания любых навыков, которые вы хотите, а также связать их с рабочими местами и пользователями с помощью ManyToManyField. Это позволит легко добавлять, обновлять или удалять любые навыки.

class Skill(models.Model):
    name = models.CharField(max_length=250)

class Job(models.Model):
    title = models.CharField(max_length=255)    
    location = models.CharField(max_length=255, blank=True, null=True)
    description = models.TextField()
    requirements = models.TextField(blank=True, null=True)
    skills = models.ManyToManyField(Skill, blank=True, related_name='as_job_skill')

class User_profile(models.Model):
    user = models.OneToOneField(User, related_name='userprofile', on_delete=models.CASCADE)
    is_employer = models.BooleanField(default=False)
    resume = models.ImageField(default='default.jpg', upload_to='resume')
    full_name = models.CharField(max_length=255, default='Enter full name')
    relevant_background = models.TextField()
    skills = models.ManyToManyField(Skill, blank=True, related_name='as_user_skill')

Вы также можете легко найти подходящую работу для пользователей.

def match_jobs(request):
    user_profile = request.user.userprofile
    matched_jobs = Job.objects.filter(skills__in=user_profile.skills.all()).distinct()
    return render(request, 'jobmatch.html', matched_jobs)

Вам необходимо перепроектировать свои модели.

Храните все навыки в отдельной таблице.

class Skill(models.Model):
  name = models.CharField(max_length=50) # example web development

Теперь вы можете связать модель вакансий и профиля пользователя с моделью навыков через отношения ManyToMany.

class Job(models.Model):
  ......
  skills = models.ManyToManyField(Skill)
 
class UserProfile(models.Model):
.........
  skills = models.ManyToManyField(Skill)

Теперь вы можете получить подходящую работу с помощью этого.

 user_skills = request.user.userprofile.skills.all()
 matched_jobs = Job.objects.filter(skills__in=user_skills)
Вернуться на верх