Skip to content

Commit def5c10

Browse files
Merge pull request #144 from null-open-security-community/main
Add slugs for jobs and users
2 parents 6450517 + 833e3fa commit def5c10

File tree

4 files changed

+31
-3
lines changed

4 files changed

+31
-3
lines changed

apps/accounts/models.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import uuid
2-
2+
from django.utils.text import slugify
33
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
44
from django.db import models
55

@@ -41,6 +41,7 @@ def create_superuser(self, email, name, password=None):
4141

4242
class User(AbstractBaseUser):
4343
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
44+
slug = models.SlugField(unique=True, blank=True, editable=False)
4445

4546
email = models.EmailField(max_length=255, unique=True)
4647
name = models.CharField(max_length=200)
@@ -70,5 +71,17 @@ class User(AbstractBaseUser):
7071
USERNAME_FIELD = "email" # by default required
7172
REQUIRED_FIELDS = ["name"]
7273

74+
def save(self, *args, **kwargs):
75+
if not self.slug: # Generate slug only if it doesn't exist
76+
self.slug = slugify(self.name)
77+
# Ensure uniqueness by appending a counter if needed
78+
unique_slug = self.slug
79+
counter = 1
80+
while User.objects.filter(slug=unique_slug).exists():
81+
unique_slug = f"{self.slug}{counter}"
82+
counter += 1
83+
self.slug = unique_slug
84+
super().save(*args, **kwargs)
85+
7386
class Meta:
7487
db_table = "tbl_user_auth"

apps/accounts/serializers.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,8 @@ class Meta:
9898
"is_verified",
9999
"is_profile_completed",
100100
"is_active",
101-
"user_type"
101+
"user_type",
102+
"slug"
102103
]
103104

104105

apps/jobs/models.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from apps.accounts.models import User
66
from apps.jobs.constants import values
7+
from django.utils.text import slugify
78
from apps.jobs.constants.values import GENDER, HIRING_STATUS, JOB_TYPE, STATUS_CHOICES
89

910

@@ -66,6 +67,7 @@ class Meta:
6667
job_id = models.UUIDField(
6768
primary_key=True, default=uuid.uuid4, editable=False, null=False
6869
)
70+
slug = models.SlugField(unique=True, blank=True)
6971

7072
# relations to the user and the company as the jobs are posted by
7173
# a particular user and the company is more of a employer profile mapping
@@ -101,6 +103,18 @@ class Meta:
101103
education_or_certifications = models.TextField(default="No Education details provided")
102104
about = models.TextField(default="No description provided")
103105

106+
def save(self, *args, **kwargs):
107+
if not self.slug: # Generate slug only if it doesn't exist
108+
self.slug = slugify(self.title)
109+
# Ensure uniqueness by appending a counter if needed
110+
unique_slug = self.slug
111+
counter = 1
112+
while Job.objects.filter(slug=unique_slug).exists():
113+
unique_slug = f"{self.slug}{counter}"
114+
counter += 1
115+
self.slug = unique_slug
116+
super().save(*args, **kwargs)
117+
104118

105119
class ContactMessage(models.Model):
106120
"""Represents contact_us model.

apps/jobs/serializers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class Meta:
2222

2323
model = Job
2424
fields = "__all__"
25-
read_only_fields = ["employer_id", "company"]
25+
read_only_fields = ["employer_id", "company", "slug"]
2626

2727
def to_representation(self, instance):
2828
"""

0 commit comments

Comments
 (0)