django bacekdn opeartioanl fixes and site wp integration api fixes
This commit is contained in:
@@ -142,44 +142,67 @@ class Keywords(SoftDeletableModel, SiteSectorBaseModel):
|
||||
@property
|
||||
def keyword(self):
|
||||
"""Get keyword text from seed_keyword"""
|
||||
return self.seed_keyword.keyword if self.seed_keyword else ''
|
||||
try:
|
||||
return self.seed_keyword.keyword if self.seed_keyword else ''
|
||||
except self.__class__.seed_keyword.RelatedObjectDoesNotExist:
|
||||
return ''
|
||||
|
||||
@property
|
||||
def volume(self):
|
||||
"""Get volume from override or seed_keyword"""
|
||||
return self.volume_override if self.volume_override is not None else (self.seed_keyword.volume if self.seed_keyword else 0)
|
||||
try:
|
||||
seed_kw = self.seed_keyword
|
||||
except self.__class__.seed_keyword.RelatedObjectDoesNotExist:
|
||||
seed_kw = None
|
||||
return self.volume_override if self.volume_override is not None else (seed_kw.volume if seed_kw else 0)
|
||||
|
||||
@property
|
||||
def difficulty(self):
|
||||
"""Get difficulty from override or seed_keyword"""
|
||||
return self.difficulty_override if self.difficulty_override is not None else (self.seed_keyword.difficulty if self.seed_keyword else 0)
|
||||
try:
|
||||
seed_kw = self.seed_keyword
|
||||
except self.__class__.seed_keyword.RelatedObjectDoesNotExist:
|
||||
seed_kw = None
|
||||
return self.difficulty_override if self.difficulty_override is not None else (seed_kw.difficulty if seed_kw else 0)
|
||||
|
||||
@property
|
||||
def country(self):
|
||||
"""Get country from seed_keyword"""
|
||||
return self.seed_keyword.country if self.seed_keyword else 'US'
|
||||
try:
|
||||
return self.seed_keyword.country if self.seed_keyword else 'US'
|
||||
except self.__class__.seed_keyword.RelatedObjectDoesNotExist:
|
||||
return 'US'
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
"""Validate that seed_keyword's industry/sector matches site's industry/sector"""
|
||||
if self.seed_keyword and self.site and self.sector:
|
||||
# Skip validation if seed_keyword is None (during soft delete or orphaned)
|
||||
try:
|
||||
seed_kw = self.seed_keyword
|
||||
except self.__class__.seed_keyword.RelatedObjectDoesNotExist:
|
||||
seed_kw = None
|
||||
|
||||
if seed_kw and self.site and self.sector:
|
||||
# Validate industry match
|
||||
if self.site.industry != self.seed_keyword.industry:
|
||||
if self.site.industry != seed_kw.industry:
|
||||
from django.core.exceptions import ValidationError
|
||||
raise ValidationError(
|
||||
f"SeedKeyword industry ({self.seed_keyword.industry.name}) must match site industry ({self.site.industry.name})"
|
||||
f"SeedKeyword industry ({seed_kw.industry.name}) must match site industry ({self.site.industry.name})"
|
||||
)
|
||||
|
||||
# Validate sector match (site sector's industry_sector must match seed_keyword's sector)
|
||||
if self.sector.industry_sector != self.seed_keyword.sector:
|
||||
if self.sector.industry_sector != seed_kw.sector:
|
||||
from django.core.exceptions import ValidationError
|
||||
raise ValidationError(
|
||||
f"SeedKeyword sector ({self.seed_keyword.sector.name}) must match site sector's industry sector ({self.sector.industry_sector.name if self.sector.industry_sector else 'None'})"
|
||||
f"SeedKeyword sector ({seed_kw.sector.name}) must match site sector's industry sector ({self.sector.industry_sector.name if self.sector.industry_sector else 'None'})"
|
||||
)
|
||||
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
def __str__(self):
|
||||
return self.keyword
|
||||
try:
|
||||
return self.seed_keyword.keyword if self.seed_keyword else f'Keyword #{self.pk}'
|
||||
except self.__class__.seed_keyword.RelatedObjectDoesNotExist:
|
||||
return f'Keyword #{self.pk} (orphaned)'
|
||||
|
||||
|
||||
class ContentIdeas(SoftDeletableModel, SiteSectorBaseModel):
|
||||
|
||||
Reference in New Issue
Block a user