models.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. # models.py
  2. from django.db import models
  3. from django.contrib.postgres.fields import JSONField
  4. import json
  5. class Product(models.Model):
  6. """Product model to store basic product information"""
  7. sku = models.CharField(max_length=100, unique=True)
  8. category = models.CharField(max_length=100)
  9. title = models.TextField()
  10. description = models.TextField(blank=True)
  11. attributes = models.JSONField(default=dict)
  12. created_at = models.DateTimeField(auto_now_add=True)
  13. updated_at = models.DateTimeField(auto_now=True)
  14. class Meta:
  15. indexes = [
  16. models.Index(fields=['category']),
  17. models.Index(fields=['sku']),
  18. ]
  19. def __str__(self):
  20. return f"{self.sku} - {self.title}"
  21. class AttributeScore(models.Model):
  22. """Store attribute quality scores"""
  23. product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='attribute_scores')
  24. score = models.FloatField()
  25. max_score = models.FloatField(default=100.0)
  26. details = models.JSONField(default=dict)
  27. issues = models.JSONField(default=list)
  28. suggestions = models.JSONField(default=list)
  29. ai_suggestions = models.JSONField(default=dict, blank=True) # Gemini AI suggestions
  30. processing_time = models.FloatField(null=True, blank=True)
  31. created_at = models.DateTimeField(auto_now_add=True)
  32. class Meta:
  33. indexes = [
  34. models.Index(fields=['-created_at']),
  35. ]
  36. def __str__(self):
  37. return f"{self.product.sku} - Score: {self.score}/{self.max_score}"
  38. class CategoryAttributeRule(models.Model):
  39. """Define mandatory attributes per category"""
  40. category = models.CharField(max_length=100)
  41. attribute_name = models.CharField(max_length=100)
  42. is_mandatory = models.BooleanField(default=False)
  43. valid_values = models.JSONField(default=list, blank=True)
  44. data_type = models.CharField(max_length=50, default='string')
  45. validation_regex = models.CharField(max_length=500, blank=True)
  46. min_length = models.IntegerField(null=True, blank=True)
  47. max_length = models.IntegerField(null=True, blank=True)
  48. description = models.TextField(blank=True)
  49. class Meta:
  50. unique_together = ('category', 'attribute_name')
  51. indexes = [
  52. models.Index(fields=['category']),
  53. ]
  54. def __str__(self):
  55. return f"{self.category} - {self.attribute_name}"