Files
vapemap/app/stores/models/links.py

55 lines
1.6 KiB
Python

from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
from django.template.loader import render_to_string
class LinkType(models.Model):
"""
Define types of links that can be used on objects
"""
name = models.CharField('Name', max_length=200)
icon = models.CharField('Icon', max_length=100, default="icon-globe")
url_format = models.CharField('URL Format', max_length=255)
is_active = models.BooleanField('Active?', default=False)
def __unicode__(self):
return self.name
class Meta:
ordering = ['name']
app_label = 'stores'
class Link(models.Model):
"""
Represents a link that can be bound to a object
"""
object_id = models.PositiveIntegerField()
object_type = models.ForeignKey(ContentType)
generic_obj = generic.GenericForeignKey('object_type', 'object_id')
account_type = models.ForeignKey('stores.LinkType', related_name='+')
account_name = models.CharField('Account Name', max_length=200)
@property
def url(self):
if self.account_type.url_format == '':
return None
return self.account_type.url_format % {'account': self.account_name}
@property
def to_html(self):
dt = {
'url': self.url,
'name': self.account_name,
'type_name': self.account_type,
'type_icon': self.account_type.icon,
}
return render_to_string('stores/link_snippet.html', dt)
def __unicode__(self):
return u'%s - %s' % (self.account_type, self.account_name)
class Meta:
app_label = 'stores'