mirror of https://github.com/scrapy/scrapy.git
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:
parent
9fa14def03
commit
a5aa40c214
|
|
@ -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", ]
|
||||
|
|
|
|||
|
|
@ -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 ''
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
)
|
||||
|
|
@ -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/")
|
||||
|
|
|
|||
Loading…
Reference in New Issue