diff --git a/sites/scrapy.org/site/apps/link/models.py b/sites/scrapy.org/site/apps/link/models.py index 747992185..47c3f8626 100644 --- a/sites/scrapy.org/site/apps/link/models.py +++ b/sites/scrapy.org/site/apps/link/models.py @@ -36,8 +36,6 @@ class Link(models.Model): text = models.CharField(_("text"), max_length=1024, core=True, blank=False) address = models.CharField(_("address"), max_length=1024, core=True, blank=False) - group = models.ManyToManyField(Group, verbose_name=_("group"), blank=True, - null=False) # automatic dates created = models.DateTimeField(core=True, editable=False) @@ -58,4 +56,44 @@ class Link(models.Model): class Admin: list_display = ("text", "address",) - list_filter = ("group", ) + + +class GroupLink(models.Model): + group = models.ForeignKey(Group, core=True, null=False, blank=False) + link = models.ForeignKey(Link, core=True, null=False, blank=False) + position = models.IntegerField(_("position"), core=True, default=0) + + # automatic dates + created = models.DateTimeField(core=True, editable=False) + updated = models.DateTimeField(core=True, editable=False) + + def position_up(self): + self.position += 1 + self.save() + + def position_down(self): + self.position -= 1 + self.save() + + def save(self): + if not self.id: + self.created = datetime.now() + self.updated = datetime.now() + super(GroupLink, self).save() + + # ugly, but django-admin isn't very versatile right now + def position_link(self): + return _("%(position)s (Up" \ + " | Down)") % \ + { "position": self.position, "id": self.id } + position_link.short_description = u"order" + position_link.allow_tags = True + + class Admin: + list_display = ("group", "link", "position_link") + list_filter = ("group",) + + class Meta: + verbose_name = _("group link") + verbose_name_plural = _("group links") + ordering = [ "position", ] diff --git a/sites/scrapy.org/site/apps/link/templatetags/link_tags.py b/sites/scrapy.org/site/apps/link/templatetags/link_tags.py index c8e89d6ea..aaafbc7f3 100644 --- a/sites/scrapy.org/site/apps/link/templatetags/link_tags.py +++ b/sites/scrapy.org/site/apps/link/templatetags/link_tags.py @@ -2,7 +2,7 @@ from django import template from lib.templatetags import * -from link.models import Group +from link.models import GroupLink register = template.Library() @@ -27,6 +27,5 @@ class LoadLinksNode(template.Node): self.var_name = var_name def render(self, context): - group = Group.objects.get(slug=self.slug) - context[self.var_name] = group and group.link_set.all() or [] + context[self.var_name] = GroupLink.objects.filter(group__slug=self.slug) return '' diff --git a/sites/scrapy.org/site/apps/link/urls.py b/sites/scrapy.org/site/apps/link/urls.py new file mode 100644 index 000000000..66ae7a0c3 --- /dev/null +++ b/sites/scrapy.org/site/apps/link/urls.py @@ -0,0 +1,9 @@ +from django.conf.urls.defaults import * + +from link.views import * + + +urlpatterns = patterns('', + (r"^(?P\d+)/position/up/$", position_up), + (r"^(?P\d+)/position/down/$", position_down), +) diff --git a/sites/scrapy.org/site/apps/link/views.py b/sites/scrapy.org/site/apps/link/views.py index 60f00ef0e..bebb50c70 100644 --- a/sites/scrapy.org/site/apps/link/views.py +++ b/sites/scrapy.org/site/apps/link/views.py @@ -1 +1,16 @@ -# Create your views here. +from django.shortcuts import get_object_or_404 +from django.http import HttpResponseRedirect + +from link.models import GroupLink + + +def position_up(request, grouplink_id): + grouplink = get_object_or_404(GroupLink, pk=grouplink_id) + grouplink.position_up() + return HttpResponseRedirect("/admin/link/grouplink/") + + +def position_down(request, grouplink_id): + grouplink = get_object_or_404(GroupLink, pk=grouplink_id) + grouplink.position_down() + return HttpResponseRedirect("/admin/link/grouplink/")