Added implicit NxN relation between Links and Groups because an order was needed.

Added views to inc/dec the position value. This is used for link ordering.

--HG--
extra : convert_revision : svn%3Ab85faa78-f9eb-468e-a121-7cced6da292c%406
This commit is contained in:
Matias Aguirre 2008-06-27 02:07:53 +00:00
parent 9fa14def03
commit a5aa40c214
4 changed files with 68 additions and 7 deletions

View File

@ -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 (<a href='/link/%(id)s/position/up/'>Up</a>" \
" | <a href='/link/%(id)s/position/down/'>Down</a>)") % \
{ "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", ]

View File

@ -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 ''

View File

@ -0,0 +1,9 @@
from django.conf.urls.defaults import *
from link.views import *
urlpatterns = patterns('',
(r"^(?P<grouplink_id>\d+)/position/up/$", position_up),
(r"^(?P<grouplink_id>\d+)/position/down/$", position_down),
)

View File

@ -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/")