diff --git a/campaigns/__init__.py b/campaigns/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/campaigns/admin.py b/campaigns/admin.py new file mode 100644 index 0000000..b721226 --- /dev/null +++ b/campaigns/admin.py @@ -0,0 +1,9 @@ +from django.contrib import admin +from django_tenants.admin import TenantAdminMixin + +from campaigns.models import Campaign + + +@admin.register(Campaign) +class ClientAdmin(TenantAdminMixin, admin.ModelAdmin): + list_display = ('name',) diff --git a/campaigns/apps.py b/campaigns/apps.py new file mode 100644 index 0000000..0cab42c --- /dev/null +++ b/campaigns/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class CampaignsConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'campaigns' diff --git a/campaigns/migrations/0001_initial.py b/campaigns/migrations/0001_initial.py new file mode 100644 index 0000000..33f45cc --- /dev/null +++ b/campaigns/migrations/0001_initial.py @@ -0,0 +1,42 @@ +# Generated by Django 3.2.6 on 2021-08-28 21:33 + +from django.db import migrations, models +import django.db.models.deletion +import django_tenants.postgresql_backend.base + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Campaign', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('schema_name', models.CharField(db_index=True, max_length=63, unique=True, validators=[django_tenants.postgresql_backend.base._check_schema_name])), + ('slug', models.SlugField(blank=True, verbose_name='Tenant URL Name')), + ('created', models.DateTimeField()), + ('modified', models.DateTimeField(blank=True)), + ('name', models.CharField(max_length=1000)), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Domain', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('domain', models.CharField(db_index=True, max_length=253, unique=True)), + ('is_primary', models.BooleanField(db_index=True, default=True)), + ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='domains', to='campaigns.campaign')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/campaigns/migrations/0002_campaign_owner.py b/campaigns/migrations/0002_campaign_owner.py new file mode 100644 index 0000000..123e397 --- /dev/null +++ b/campaigns/migrations/0002_campaign_owner.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.6 on 2021-08-28 21:33 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('campaigns', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddField( + model_name='campaign', + name='owner', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/campaigns/migrations/__init__.py b/campaigns/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/campaigns/models.py b/campaigns/models.py new file mode 100644 index 0000000..38b7183 --- /dev/null +++ b/campaigns/models.py @@ -0,0 +1,24 @@ +from django.db import models +# Create your models here. +from django_tenants.models import DomainMixin +from tenant_users.tenants.models import TenantBase + +from rpg_notes.secrets import DEBUG + + +class Campaign(TenantBase): + name = models.CharField(max_length=1000) + + auto_create_schema = True + + def __str__(self): + return self.name + + def get_absolute_url(self): + print(self.get_primary_domain().domain) + protocol = "http://" if DEBUG else "https://" + return protocol + self.get_primary_domain().domain + (":8000" if DEBUG else "") + + +class Domain(DomainMixin): + pass diff --git a/campaigns/tests.py b/campaigns/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/campaigns/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/campaigns/views.py b/campaigns/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/campaigns/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/notes/admin.py b/notes/admin.py index 8fe34d9..e860350 100644 --- a/notes/admin.py +++ b/notes/admin.py @@ -2,9 +2,8 @@ from django.contrib import admin # Register your models here. from simple_history.admin import SimpleHistoryAdmin -from notes.models import Character, Campaign, Faction, Location, Loot, IngameDay, Session +from notes.models import Character, Faction, Location, Loot, IngameDay, Session -admin.site.register(Campaign, SimpleHistoryAdmin) admin.site.register(Character, SimpleHistoryAdmin) admin.site.register(Faction, SimpleHistoryAdmin) admin.site.register(Location, SimpleHistoryAdmin) diff --git a/notes/forms.py b/notes/forms.py index 95bd51d..8ced11f 100644 --- a/notes/forms.py +++ b/notes/forms.py @@ -1,13 +1,8 @@ from django.forms import ModelForm, ModelMultipleChoiceField, CheckboxSelectMultiple -from notes.models import Campaign, Loot, Character, IngameDay, Session +from notes.models import Loot, Character, IngameDay, Session -class CampaignForm(ModelForm): - class Meta: - model = Campaign - fields = "__all__" - class LootForm(ModelForm): class Meta: diff --git a/notes/migrations/0014_auto_20210828_2311.py b/notes/migrations/0014_auto_20210828_2311.py new file mode 100644 index 0000000..db3dbd6 --- /dev/null +++ b/notes/migrations/0014_auto_20210828_2311.py @@ -0,0 +1,87 @@ +# Generated by Django 3.2.6 on 2021-08-28 21:11 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('notes', '0013_auto_20210823_1405'), + ] + + operations = [ + migrations.RemoveField( + model_name='campaign', + name='dm', + ), + migrations.RemoveField( + model_name='character', + name='campaign', + ), + migrations.RemoveField( + model_name='historicalcharacter', + name='campaign', + ), + migrations.RemoveField( + model_name='historicalfaction', + name='campaign', + ), + migrations.RemoveField( + model_name='historicalingameday', + name='campaign', + ), + migrations.RemoveField( + model_name='historicallocation', + name='campaign', + ), + migrations.RemoveField( + model_name='historicalloot', + name='campaign', + ), + migrations.RemoveField( + model_name='historicalsession', + name='campaign', + ), + migrations.RemoveField( + model_name='loot', + name='campaign', + ), + migrations.AlterUniqueTogether( + name='faction', + unique_together=set(), + ), + migrations.AlterUniqueTogether( + name='ingameday', + unique_together=set(), + ), + migrations.AlterUniqueTogether( + name='location', + unique_together=set(), + ), + migrations.AlterUniqueTogether( + name='session', + unique_together=set(), + ), + migrations.DeleteModel( + name='HistoricalCampaign', + ), + migrations.RemoveField( + model_name='faction', + name='campaign', + ), + migrations.RemoveField( + model_name='ingameday', + name='campaign', + ), + migrations.RemoveField( + model_name='location', + name='campaign', + ), + migrations.RemoveField( + model_name='session', + name='campaign', + ), + migrations.DeleteModel( + name='Campaign', + ), + ] diff --git a/notes/migrations/0015_auto_20210828_2323.py b/notes/migrations/0015_auto_20210828_2323.py new file mode 100644 index 0000000..46faedb --- /dev/null +++ b/notes/migrations/0015_auto_20210828_2323.py @@ -0,0 +1,28 @@ +# Generated by Django 3.2.6 on 2021-08-28 21:23 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('notes', '0014_auto_20210828_2311'), + ] + + operations = [ + migrations.AlterField( + model_name='character', + name='slug', + field=models.SlugField(editable=False, unique=True), + ), + migrations.AlterField( + model_name='faction', + name='slug', + field=models.SlugField(editable=False, unique=True), + ), + migrations.AlterField( + model_name='location', + name='slug', + field=models.SlugField(editable=False, unique=True), + ), + ] diff --git a/notes/models/__init__.py b/notes/models/__init__.py index def5a8c..8176861 100644 --- a/notes/models/__init__.py +++ b/notes/models/__init__.py @@ -1,5 +1,4 @@ from .descriptionmodel import DescriptionModel -from .campaign import Campaign from .basemodel import BaseModel from .faction import Faction from .location import Location diff --git a/notes/models/basemodel.py b/notes/models/basemodel.py index b872f6a..bee8461 100644 --- a/notes/models/basemodel.py +++ b/notes/models/basemodel.py @@ -1,17 +1,13 @@ from django.db import models from django.utils.text import slugify -from notes.models import Campaign - class BaseModel(models.Model): - campaign = models.ForeignKey(Campaign, on_delete=models.PROTECT) name = models.CharField(max_length=1000) - slug = models.SlugField(editable=False) + slug = models.SlugField(editable=False, unique=True) class Meta: abstract = True - unique_together = ["campaign", "slug"] def save(self, *args, **kwargs): if not self.id: diff --git a/notes/models/campaign.py b/notes/models/campaign.py deleted file mode 100644 index 6f7b649..0000000 --- a/notes/models/campaign.py +++ /dev/null @@ -1,21 +0,0 @@ -from django.conf import settings -from django.db import models -from django.urls import reverse -from simple_history.models import HistoricalRecords - -from notes.models import DescriptionModel - - -class Campaign(DescriptionModel): - name = models.CharField(max_length=1000) - slug = models.SlugField(unique=True, editable=False) - dm = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT) - created = models.DateTimeField(auto_now_add=True) - last_modified = models.DateTimeField(auto_now=True) - history = HistoricalRecords() - - def get_absolute_url(self): - return reverse('campaigndetail', args=[str(self.slug)]) - - def __str__(self): - return self.name diff --git a/notes/models/character.py b/notes/models/character.py index 9a3b89f..0db5837 100644 --- a/notes/models/character.py +++ b/notes/models/character.py @@ -24,7 +24,7 @@ class Character(BaseModel, DescriptionModel): ordering = ["name"] def get_absolute_url(self): - return reverse('characterdetail', args=[self.campaign.slug, self.slug]) + return reverse('characterdetail', args=[self.slug]) def initials(self): return "".join([word[0] for word in self.name.split()][:2]).upper() diff --git a/notes/models/ingameday.py b/notes/models/ingameday.py index c88b03b..ac6196b 100644 --- a/notes/models/ingameday.py +++ b/notes/models/ingameday.py @@ -3,12 +3,10 @@ from django.db import models from django.urls import reverse from simple_history.models import HistoricalRecords -from notes.models import Campaign, Session, DescriptionModel +from notes.models import Session, DescriptionModel class IngameDay(DescriptionModel): - campaign = models.ForeignKey(Campaign, on_delete=models.PROTECT) - day = models.PositiveIntegerField() sessions = models.ManyToManyField(Session, related_name="ingame_days") @@ -18,10 +16,9 @@ class IngameDay(DescriptionModel): class Meta: ordering = ["-day"] - unique_together = ["campaign", "day"] def get_absolute_url(self): - return reverse('daydetail', args=[self.campaign.slug, self.day]) + return reverse('daydetail', args=[self.day]) @property def prettyname(self): diff --git a/notes/models/loot.py b/notes/models/loot.py index ca1282f..dd7768f 100644 --- a/notes/models/loot.py +++ b/notes/models/loot.py @@ -2,12 +2,10 @@ from django.conf import settings from django.db import models from simple_history.models import HistoricalRecords -from notes.models import Campaign, DescriptionModel +from notes.models import DescriptionModel class Loot(DescriptionModel): - campaign = models.ForeignKey(Campaign, on_delete=models.PROTECT) - name = models.CharField(max_length=1000) quantity = models.PositiveSmallIntegerField() value_gold = models.DecimalField("Value (Gold)", max_digits=7, decimal_places=2) diff --git a/notes/models/session.py b/notes/models/session.py index 8257f0b..62de6fe 100644 --- a/notes/models/session.py +++ b/notes/models/session.py @@ -4,12 +4,8 @@ from django.db import models from django.urls import reverse from simple_history.models import HistoricalRecords -from notes.models import Campaign - class Session(models.Model): - campaign = models.ForeignKey(Campaign, on_delete=models.PROTECT) - day = models.DateField(default=date.today) created = models.DateTimeField(auto_now_add=True) last_modified = models.DateTimeField(auto_now=True) @@ -17,10 +13,9 @@ class Session(models.Model): class Meta: ordering = ["-day"] - unique_together = ["campaign", "day"] def get_absolute_url(self): - return reverse('sessiondetail', args=[self.campaign.slug, self.id]) + return reverse('sessiondetail', args=[self.id]) def __str__(self): return str(self.day) diff --git a/notes/templates/navbarbase.html b/notes/templates/navbarbase.html index 79d9dd5..98a912c 100644 --- a/notes/templates/navbarbase.html +++ b/notes/templates/navbarbase.html @@ -9,17 +9,17 @@
diff --git a/notes/templates/notes/character_detail.html b/notes/templates/notes/character_detail.html index 901da47..be1ecb1 100644 --- a/notes/templates/notes/character_detail.html +++ b/notes/templates/notes/character_detail.html @@ -16,7 +16,7 @@ {% include "notes/macros/character-pillar.html" with character=c %} {% endfor %} - Add Character + Add CharacterValue each: {{ l.value_per_unit|format_money_html }}
{{ next }}
.
+