Skip to content

Instantly share code, notes, and snippets.

@ironhouzi
Last active November 7, 2016 23:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ironhouzi/48578cc827c65893c57afc380168cf99 to your computer and use it in GitHub Desktop.
Save ironhouzi/48578cc827c65893c57afc380168cf99 to your computer and use it in GitHub Desktop.
Error: django.db.utils.ProgrammingError: multiple primary keys for table "gcal_centre" are not allowed
class AbstractHomePage(Page):
body = StreamField(HomePageStreamBlock(), verbose_name='hovedinnhold')
headingpanel = StreamField(
HeadingPanelStreamBlock(),
verbose_name='overpanel'
)
sidepanel = StreamField(SidePanelStreamBlock(), verbose_name='sidepanel')
class Meta:
abstract = True
search_fields = Page.search_fields + [index.SearchField('body')]
content_panels = [
FieldPanel('title'),
StreamFieldPanel('body'),
]
pagesection_panels = [
StreamFieldPanel('headingpanel'),
StreamFieldPanel('sidepanel'),
]
edit_handler = TabbedInterface([
ObjectList(content_panels, heading='Hovedinnhold'),
ObjectList(pagesection_panels, heading='Seksjoner'),
ObjectList(Page.promote_panels, heading='Promovér'),
ObjectList(
Page.settings_panels,
heading='Instillinger',
classname='settings'
),
])
class Centre(AbstractHomePage):
code = models.CharField(
'Kode',
max_length=3,
blank=False
)
address = models.TextField('Addresse', blank=False)
google_location = models.CharField(
'Google-lokasjon',
max_length=255,
blank=False
)
map_query = models.CharField('GoogleMaps-lokasjon', max_length=1024)
tlf = models.CharField(
'Telefonnummer',
max_length=18,
null=True,
blank=True
)
image = models.ForeignKey(
'wagtailimages.Image',
null=True,
blank=True,
on_delete=models.SET_NULL,
related_name='+'
)
content_panels = Page.content_panels + [
FieldPanel('code'),
FieldPanel('address'),
FieldPanel('tlf'),
ImageChooserPanel('image'),
]
def split_address(self):
return self.address.split(',')
class Meta:
verbose_name = 'Senter'
verbose_name_plural = 'Sentre'
class Calendar(models.Model):
calendar_id = models.CharField(max_length=200, primary_key=True)
summary = models.CharField('Oppsummering', max_length=200)
description = models.CharField('Beskrivelse', max_length=1000)
public = models.BooleanField('Offentlig kalender', blank=False)
sync_token = models.CharField(max_length=50, null=True, blank=True)
centre = models.OneToOneField(
'Centre',
on_delete=models.SET_NULL,
verbose_name='Senter',
related_name='calendar',
null=True,
blank=False
)
def __str__(self):
return self.summary
class Event(models.Model):
event_id = models.CharField(max_length=1024, primary_key=True)
start = models.DateTimeField('Start')
end = models.DateTimeField('Slutt')
full_day = models.BooleanField('Full dag', default=False)
cancelled = models.BooleanField('Kansellert', default=False)
centre = models.ForeignKey(
'Centre',
on_delete=models.SET_NULL,
verbose_name='Senter',
related_name='events',
null=True,
blank=False
)
event_page = models.ForeignKey(
'EventPage',
on_delete=models.SET_NULL,
verbose_name='Aktivitetside',
related_name='event_instances',
null=True,
blank=False
)
def __str__(self):
return self.event_page.title
class Meta:
ordering = ['start']
verbose_name = 'Aktivitet'
verbose_name_plural = 'Aktiviteter'
class EventPage(AbstractHomePage):
master_event_id = models.CharField(max_length=1024, unique=True)
creator = JSONField(null=True, blank=True)
recurrence = ArrayField(
models.CharField(max_length=200),
null=True,
blank=True
)
google_cal_url = models.URLField('Google calendar lenke', max_length=1024)
calendar = models.ForeignKey(
Calendar,
on_delete=models.PROTECT,
verbose_name='Kalender',
related_name='events',
null=True,
blank=False
)
# TODO: create inline panel for recurrence
content_panels = Page.content_panels + [
FieldPanel('calendar'),
]
def __repr__(self):
return '<EventPage: "{}" ({})>'.format(self.title, self.master_event_id)
def __str__(self):
if self.event_instances.count() == 0:
return self.title
else:
return '{} | Starter: {} | Antall: {}'.format(
self.title,
self.event_instances.first().start.strftime('%d. %b %Y'),
self.event_instances.count()
)
class Meta:
verbose_name = 'Aktivitetside'
verbose_name_plural = 'Aktivitetsider'
from django.db import models
class Centre(models.Model):
code = models.CharField(
'Kode',
max_length=3,
primary_key=True
)
name = models.CharField('Navn', max_length=200, blank=False)
address = models.TextField('Addresse', blank=False)
description = models.CharField('Beskrivelse', max_length=200, blank=False)
tlf = models.CharField(max_length=18, null=True, blank=True)
image = models.ImageField('Bilde', null=True, blank=True)
def __str__(self):
return self.code
class Calendar(models.Model):
calendar_id = models.CharField(max_length=200, primary_key=True)
summary = models.CharField('Oppsummering', max_length=200)
description = models.CharField('Beskrivelse', max_length=1000)
public = models.BooleanField('Offentlig kalender', blank=False)
sync_token = models.CharField(max_length=50, null=True, blank=True)
centre = models.ForeignKey(
Centre,
on_delete=models.SET_NULL,
verbose_name='Senter',
related_name='centre',
null=True,
blank=True
)
def __str__(self):
return self.summary
class Event(models.Model):
event_id = models.CharField(max_length=1024, primary_key=True)
start = models.DateTimeField('Start', null=False, blank=False)
end = models.DateTimeField('Slutt', null=False, blank=False)
summary = models.CharField('Oppsummering', max_length=400)
full_day = models.BooleanField('Full dag', blank=False)
html_link = models.URLField('Google lenke', null=True, blank=True)
calendar = models.ForeignKey(
Calendar,
on_delete=models.PROTECT,
verbose_name='Kalender',
related_name='calendar',
null=False,
blank=False
)
def __str__(self):
return self.summary
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment