diff --git a/templates/watchlist/edit.html b/templates/watchlist/edit.html
index 188d50f..740bb6a 100644
--- a/templates/watchlist/edit.html
+++ b/templates/watchlist/edit.html
@@ -1,6 +1,7 @@
{% extends 'base.html' %}
{% block content %}
{{ movie.name }}
Suggested by: {{movie.suggested_by.username}}
-
{% if request.user.is_staff or movie.suggested_by == request.user %}
Edit{% endif %}
IMDBČSFD
+
Votes
{% if votes|length == 0 %}
Nobody voted yet, be first...
diff --git a/watchlist/forms.py b/watchlist/forms.py
index 0d7a43e..6a3d221 100644
--- a/watchlist/forms.py
+++ b/watchlist/forms.py
@@ -6,4 +6,4 @@ class MovieEditForm(forms.ModelForm):
class Meta:
model = models.Movie
- fields = ["name", "suggested_by", "watched"]
\ No newline at end of file
+ fields = ["name", "suggested_by", "watched", "imdb_id", "csfd_id"]
\ No newline at end of file
diff --git a/watchlist/migrations/0006_movie_csfd_id_movie_imdb_id.py b/watchlist/migrations/0006_movie_csfd_id_movie_imdb_id.py
new file mode 100644
index 0000000..0d51128
--- /dev/null
+++ b/watchlist/migrations/0006_movie_csfd_id_movie_imdb_id.py
@@ -0,0 +1,23 @@
+# Generated by Django 4.1.5 on 2023-02-10 12:54
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('watchlist', '0005_movievote_comment'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='movie',
+ name='csfd_id',
+ field=models.IntegerField(null=True),
+ ),
+ migrations.AddField(
+ model_name='movie',
+ name='imdb_id',
+ field=models.CharField(blank=True, max_length=32),
+ ),
+ ]
diff --git a/watchlist/migrations/0007_alter_movie_csfd_id_alter_movie_imdb_id.py b/watchlist/migrations/0007_alter_movie_csfd_id_alter_movie_imdb_id.py
new file mode 100644
index 0000000..7201b0e
--- /dev/null
+++ b/watchlist/migrations/0007_alter_movie_csfd_id_alter_movie_imdb_id.py
@@ -0,0 +1,25 @@
+# Generated by Django 4.1.5 on 2023-02-10 13:26
+
+from django.db import migrations, models
+import watchlist.models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('watchlist', '0006_movie_csfd_id_movie_imdb_id'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='movie',
+ name='csfd_id',
+ field=models.CharField(blank=True, default='', max_length=32, validators=[watchlist.models.validate_imdb_id]),
+ preserve_default=False,
+ ),
+ migrations.AlterField(
+ model_name='movie',
+ name='imdb_id',
+ field=models.CharField(blank=True, max_length=32, validators=[watchlist.models.validate_csfd_id]),
+ ),
+ ]
diff --git a/watchlist/models.py b/watchlist/models.py
index 12818fe..0bc86fd 100644
--- a/watchlist/models.py
+++ b/watchlist/models.py
@@ -1,8 +1,19 @@
+import re
+
from functools import reduce
from django.db import models
from django.contrib.auth.models import User
from django.contrib import admin
+IMDB_ID_RE = re.compile(r'(?P
tt\d{7,})')
+CSFD_ID_RE = re.compile(r'(?P\d+)')
+
+def validate_imdb_id(v: str) -> bool:
+ return IMDB_ID_RE.match(v)
+
+def validate_csfd_id(v: str) -> bool:
+ return CSFD_ID_RE.match(v)
+
class Movie(models.Model):
class Meta:
@@ -13,6 +24,8 @@ class Movie(models.Model):
name = models.CharField(max_length=100)
suggested_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
watched = models.BooleanField(default=False)
+ imdb_id = models.CharField(max_length=32, blank=True, validators=[validate_csfd_id])
+ csfd_id = models.CharField(max_length=32, blank=True, validators=[validate_imdb_id])
@property
def score(self):
diff --git a/watchlist/views.py b/watchlist/views.py
index 88ff034..6c138e9 100644
--- a/watchlist/views.py
+++ b/watchlist/views.py
@@ -71,6 +71,7 @@ class EditView(generic.DetailView):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["users"] = User.objects.all() if self.request.user.has_perm("watchlist.moderate_movies") else None
+ context["error"] = self.request.GET.get("error", None)
return context
def get(self, request, *args, **kwargs):
@@ -84,7 +85,28 @@ class EditView(generic.DetailView):
if not self.can_edit_movie(request):
return HttpResponseForbidden("You cannot edit this object.")
if "name" in request.POST:
- self.object.name = request.POST["name"]
+ name = request.POST["name"]
+ if name == '':
+ return HttpResponseRedirect(reverse('watchlist:edit', args=(kwargs["pk"],)) + "?error=Invalid%20name")
+ self.object.name = name
+ if "imdb_id" in request.POST:
+ if request.POST["imdb_id"] == '':
+ if self.object.imdb_id != '':
+ self.object.imdb_id = ''
+ else:
+ match = models.IMDB_ID_RE.search(request.POST["imdb_id"])
+ if not match:
+ return HttpResponseRedirect(reverse('watchlist:edit', args=(kwargs["pk"],)) + "?error=Invalid%20IMDB%20ID")
+ self.object.imdb_id = match.group()
+ if "csfd_id" in request.POST:
+ if request.POST["csfd_id"] == '':
+ if self.object.csfd_id != '':
+ self.object.csfd_id = ''
+ else:
+ match = models.CSFD_ID_RE.search(request.POST["csfd_id"])
+ if not match:
+ return HttpResponseRedirect(reverse('watchlist:edit', args=(kwargs["pk"],)) + "?error=Invalid%20CSFD%20ID")
+ self.object.csfd_id = match.group()
if "suggested_by" in request.POST:
if request.user.has_perm('watchlist.moderate_movies'):
new_suggestor = User.objects.filter(username=request.POST["suggested_by"]).first()
@@ -105,7 +127,7 @@ def submit(request):
return HttpResponseForbidden("You can't add new movies.")
movie = models.Movie(name=request.POST["name"], suggested_by=request.user, watched=False)
movie.save()
- return HttpResponseRedirect(reverse("watchlist:index"))
+ return HttpResponseRedirect(reverse("watchlist:edit", args=(movie.id,)))
@login_required
@require_POST