mirror of
https://gitlab.science.ru.nl/technicie/MarietjeDjango.git
synced 2025-12-10 08:02:26 +01:00
Song reporting and user stats
This commit is contained in:
committed by
Daan Sprenkels
parent
0c1f9cb08d
commit
f6fcc63450
@ -1,20 +1,33 @@
|
||||
from django.contrib import admin
|
||||
|
||||
from .models import Song
|
||||
from .models import ReportNote, Song
|
||||
|
||||
|
||||
class ReportNoteInline(admin.StackedInline):
|
||||
model = ReportNote
|
||||
extra = 0
|
||||
|
||||
@admin.register(Song)
|
||||
class SongAdmin(admin.ModelAdmin):
|
||||
list_display = ('artist', 'title', 'user_name')
|
||||
list_display = ('artist', 'title', 'user_name', 'reports')
|
||||
search_fields = ('artist', 'title', 'user__name')
|
||||
inlines = [ReportNoteInline]
|
||||
|
||||
def reports(self, song):
|
||||
return ReportNote.objects.filter(song=song).count()
|
||||
|
||||
@staticmethod
|
||||
def user_name(obj):
|
||||
def user_name(song):
|
||||
try:
|
||||
return obj.user.name
|
||||
return song.user.name
|
||||
except AttributeError:
|
||||
return '<unknown>'
|
||||
|
||||
@staticmethod
|
||||
def get_readonly_fields(request, obj=None):
|
||||
return [] if request.user.is_superuser else ['hash']
|
||||
return [] if request.user.is_superuser else ['hash']
|
||||
|
||||
@admin.register(ReportNote)
|
||||
class ReportNoteAdmin(admin.ModelAdmin):
|
||||
list_display = ('song', 'note', 'user')
|
||||
search_fields = ('song__artist', 'song__title', 'user__name')
|
||||
|
||||
14
marietje/songs/management/commands/gather_reported_songs.py
Normal file
14
marietje/songs/management/commands/gather_reported_songs.py
Normal file
@ -0,0 +1,14 @@
|
||||
from django.conf import settings
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
from songs.models import ReportNote
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Gather all song reports'
|
||||
def handle(self, *args, **options):
|
||||
reports = ReportNote.objects.all()
|
||||
for report in reports:
|
||||
song = report.song
|
||||
url = '<{base_url}/admin/songs/song/{r.song.id}/change/>'.format(base_url=settings.BASE_URL, r=report)
|
||||
print('Song: {r.song.artist} - {r.song.title}\nMessage: {r.note}\nLink: {url}'.format(url=url, r=report))
|
||||
print('-' * 72)
|
||||
25
marietje/songs/migrations/0004_reportnote.py
Normal file
25
marietje/songs/migrations/0004_reportnote.py
Normal file
@ -0,0 +1,25 @@
|
||||
# Generated by Django 2.1.2 on 2018-12-10 14:23
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('songs', '0003_search_index'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='ReportNote',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('note', models.TextField(blank=True, help_text='reason for edit request', verbose_name='reason')),
|
||||
('song', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='songs.Song')),
|
||||
('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
]
|
||||
@ -35,5 +35,27 @@ class Song(models.Model):
|
||||
db_index=True,
|
||||
help_text='hide this song from the search listings')
|
||||
|
||||
def report(self, user, note):
|
||||
report_note = ReportNote(song=self, user=user, note=note)
|
||||
report_note.save()
|
||||
|
||||
def __str__(self):
|
||||
return self.artist + ' - ' + self.title
|
||||
|
||||
class ReportNote(models.Model):
|
||||
song = models.ForeignKey(Song,
|
||||
on_delete=models.CASCADE,
|
||||
blank=False,
|
||||
null=False,
|
||||
db_index=True)
|
||||
user = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
blank=True,
|
||||
null=True,
|
||||
db_index=True)
|
||||
note = models.TextField(verbose_name='reason', blank=True,
|
||||
help_text='reason for edit request')
|
||||
|
||||
def __str__(self):
|
||||
return "{song.artist} - {song.title}: '{note}'".format(song=self.song, note=self.note)
|
||||
|
||||
Reference in New Issue
Block a user