Feedback App¶
User feedback and review collection system.
Quick Start¶
from htk.apps.feedback.models import Feedback
# Submit feedback
feedback = Feedback.objects.create(
user=request.user,
message='Great product!',
rating=5,
category='general'
)
# Get user's feedback
user_feedback = Feedback.objects.filter(user=request.user)
# Query by category
feature_requests = Feedback.objects.filter(category='feature_request')
Submitting Feedback¶
Basic Feedback¶
from htk.apps.feedback.models import Feedback
# Simple feedback
feedback = Feedback.objects.create(
user=user,
message='Love the new design!',
rating=5
)
# Or without user
anonymous_feedback = Feedback.objects.create(
email='user@example.com',
message='Found a bug',
rating=2,
category='bug'
)
Categorized Feedback¶
from htk.apps.feedback.models import Feedback
# Categorize feedback
categories = ['general', 'bug', 'feature_request', 'support']
bug_report = Feedback.objects.create(
user=user,
message='Image upload broken',
category='bug',
rating=1
)
feature_req = Feedback.objects.create(
user=user,
message='Please add dark mode',
category='feature_request',
rating=4
)
Common Patterns¶
Feedback Analytics¶
from django.db.models import Avg, Count
from htk.apps.feedback.models import Feedback
# Average rating
avg_rating = Feedback.objects.aggregate(
avg=Avg('rating')
)['avg']
# Count by category
feedback_by_category = Feedback.objects.values('category').annotate(
count=Count('id'),
avg_rating=Avg('rating')
).order_by('-count')
# Get top rated feedback
top_feedback = Feedback.objects.order_by('-rating')[:10]
# Recent feedback
recent = Feedback.objects.order_by('-created')[:20]
Feedback Dashboard¶
from django.db.models import Avg, Count, Q
from htk.apps.feedback.models import Feedback
from django.utils import timezone
from datetime import timedelta
# Last 30 days stats
cutoff = timezone.now() - timedelta(days=30)
recent_feedback = Feedback.objects.filter(created__gte=cutoff)
stats = {
'total': recent_feedback.count(),
'avg_rating': recent_feedback.aggregate(avg=Avg('rating'))['avg'],
'bugs': recent_feedback.filter(category='bug').count(),
'features': recent_feedback.filter(category='feature_request').count(),
}
Filter by Rating¶
from htk.apps.feedback.models import Feedback
# Get positive feedback
positive = Feedback.objects.filter(rating__gte=4)
# Get negative feedback
negative = Feedback.objects.filter(rating__lte=2)
# Get critical issues
critical = Feedback.objects.filter(
category='bug',
rating__lte=2
)
Integration with Notifications¶
from django.db.models.signals import post_save
from django.dispatch import receiver
from htk.apps.feedback.models import Feedback
from htk.apps.notifications.utils import notify
@receiver(post_save, sender=Feedback)
def notify_team_on_feedback(sender, instance, created, **kwargs):
if created:
# Notify team on new feedback
if instance.category == 'bug':
notify(
admin_users,
f'Bug report: {instance.message}',
channel='slack'
)
elif instance.category == 'feature_request':
notify(
product_team,
f'Feature request: {instance.message}',
channel='email'
)
Models¶
Feedback¶
class Feedback(models.Model):
user = ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE)
email = EmailField(blank=True)
message = TextField()
rating = IntegerField(default=0) # 1-5 stars
category = CharField(max_length=50, default='general')
created = DateTimeField(auto_now_add=True)
updated = DateTimeField(auto_now=True)
is_resolved = BooleanField(default=False)
API Views¶
Submit Feedback¶
POST /feedback/submit/
Content-Type: application/json
{
"message": "Great product!",
"rating": 5,
"category": "general"
}
Get Feedback History¶
GET /feedback/my-feedback/
Returns user's feedback history with ratings and dates.
Configuration¶
# settings.py
FEEDBACK_CATEGORIES = [
('general', 'General Feedback'),
('bug', 'Bug Report'),
('feature_request', 'Feature Request'),
('support', 'Support Issue'),
]
FEEDBACK_ENABLED = True
FEEDBACK_RATING_MIN = 1
FEEDBACK_RATING_MAX = 5
# Notification settings
FEEDBACK_NOTIFY_ON_CRITICAL = True # Notify team on low ratings
FEEDBACK_CRITICAL_THRESHOLD = 2 # Rating threshold
Best Practices¶
- Categorize feedback - Use categories for organization
- Track ratings - Use 1-5 star system for quantitative data
- Include timestamps - Track when feedback was submitted
- Allow anonymous feedback - Don't require user account
- Follow up on bugs - Mark as resolved when fixed
- Analyze trends - Review feedback regularly
- Notify team - Alert relevant teams of critical issues