minor update

This commit is contained in:
2025-08-25 13:52:30 +05:30
parent c9bba5478b
commit 17f309dcda
8 changed files with 119 additions and 20 deletions
+54 -19
View File
@@ -34,37 +34,72 @@ class IssueCategory(models.Model):
def __str__(self):
return self.name
# issues/models.py
class Issue(models.Model):
STATUS_REPORTED = 'reported'
STATUS_ACKNOWLEDGED = 'acknowledged'
STATUS_IN_PROGRESS = 'in_progress'
STATUS_RESOLVED = 'resolved'
STATUS_CHOICES = [
('reported', 'Reported'),
('acknowledged', 'Acknowledged'),
('in_progress', 'In Progress'),
('resolved', 'Resolved'),
(STATUS_REPORTED, 'Reported'),
(STATUS_ACKNOWLEDGED, 'Acknowledged'),
(STATUS_IN_PROGRESS, 'In Progress'),
(STATUS_RESOLVED, 'Resolved'),
]
title = models.CharField(max_length=200)
description = models.TextField()
category = models.ForeignKey(IssueCategory, on_delete=models.SET_NULL, null=True, blank=True)
reporter = models.ForeignKey(User, on_delete=models.CASCADE, related_name='reported_issues')
location = models.CharField(max_length=200)
latitude = models.FloatField()
longitude = models.FloatField()
photo = models.ImageField(upload_to='issue_photos/', blank=True, null=True,
validators=[FileExtensionValidator(['jpg', 'jpeg', 'png', 'gif'])])
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='reported')
category = models.ForeignKey(
"IssueCategory",
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name="issues"
)
reporter = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name="reported_issues"
)
location = models.CharField(max_length=200, blank=True)
latitude = models.FloatField(null=True, blank=True)
longitude = models.FloatField(null=True, blank=True)
photo = models.ImageField(
upload_to="issue_photos/",
blank=True,
null=True,
validators=[FileExtensionValidator(['jpg', 'jpeg', 'png', 'gif'])]
)
status = models.CharField(
max_length=20,
choices=STATUS_CHOICES,
default=STATUS_REPORTED
)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
ordering = ["-created_at"] # 🔹 latest issues first by default
def __str__(self):
return self.title
return f"{self.title} ({self.get_status_display()})"
# 🔹 Helpers
def vote_count(self):
return self.votes.count()
return self.votes.count() if hasattr(self, "votes") else 0
def has_user_voted(self, user):
if user.is_authenticated:
if user.is_authenticated and hasattr(self, "votes"):
return self.votes.filter(user=user).exists()
return False
class Vote(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)