diff options
author | expo <expo@expobox.potato.hut> | 2012-08-12 19:10:23 +0200 |
---|---|---|
committer | expo <expo@expobox.potato.hut> | 2012-08-12 19:10:23 +0200 |
commit | ecd5bbcb1dbb00cc0d39cdf80151f41c07c6c8b2 (patch) | |
tree | 0899e18f4b9ccbc63e2241c011af0090e09f415d /core | |
parent | 6d5babd3319fec50f404bf7ad044962bd1f192e9 (diff) | |
download | troggle-ecd5bbcb1dbb00cc0d39cdf80151f41c07c6c8b2.tar.gz troggle-ecd5bbcb1dbb00cc0d39cdf80151f41c07c6c8b2.tar.bz2 troggle-ecd5bbcb1dbb00cc0d39cdf80151f41c07c6c8b2.zip |
Started removing foreignkeys to caves, to achieve greater flexability. Some log book entries stuff may be broken. Add ability to make new caves and entrances via website.
Diffstat (limited to 'core')
-rw-r--r-- | core/admin.py | 3 | ||||
-rw-r--r-- | core/forms.py | 17 | ||||
-rw-r--r-- | core/models.py | 27 | ||||
-rw-r--r-- | core/views_caves.py | 29 |
4 files changed, 58 insertions, 18 deletions
diff --git a/core/admin.py b/core/admin.py index fc43f23..0192807 100644 --- a/core/admin.py +++ b/core/admin.py @@ -55,8 +55,7 @@ class PersonTripInline(admin.TabularInline): #class LogbookEntryAdmin(VersionAdmin): class LogbookEntryAdmin(TroggleModelAdmin): - prepopulated_fields = {'slug':("title",)} - raw_id_fields = ('cave',) + prepopulated_fields = {'slug':("title",)} search_fields = ('title','expedition__year') date_heirarchy = ('date') inlines = (PersonTripInline, PhotoInline, QMsFoundInline) diff --git a/core/forms.py b/core/forms.py index e0654fb..da16d79 100644 --- a/core/forms.py +++ b/core/forms.py @@ -16,8 +16,11 @@ class CaveForm(ModelForm): underground_centre_line = forms.CharField(required = False, widget=forms.Textarea()) notes = forms.CharField(required = False, widget=forms.Textarea()) references = forms.CharField(required = False, widget=forms.Textarea()) + slug = forms.CharField(required = True) + url = forms.CharField(required = True) class Meta: model = Cave + exclude = ("filename",) class VersionControlCommentForm(forms.Form): description_of_change = forms.CharField(required = True, widget=forms.Textarea()) @@ -32,14 +35,20 @@ class EntranceForm(ModelForm): #underground_centre_line = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10})) #notes = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10})) #references = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10})) + other_station = forms.CharField(required=False) # Trying to change this to a singl;e line entry + tag_station = forms.CharField(required=False) # Trying to change this to a singl;e line entry + exact_station = forms.CharField(required=False) # Trying to change this to a singl;e line entry + northing = forms.CharField(required=False) # Trying to change this to a singl;e line entry + easting = forms.CharField(required=False) # Trying to change this to a singl;e line entry + alt = forms.CharField(required=False) # Trying to change this to a singl;e line entry + slug = forms.CharField() class Meta: model = Entrance + exclude = ("cached_primary_slug", "filename",) -CaveAndEntranceFormSet = modelformset_factory(CaveAndEntrance, exclude=('cave')) -class EntranceForm(ModelForm): - class Meta: - model = Entrance + +CaveAndEntranceFormSet = modelformset_factory(CaveAndEntrance, exclude=('cave')) #class PersonForm(ModelForm): # class Meta: diff --git a/core/models.py b/core/models.py index ca4556e..1c86dd5 100644 --- a/core/models.py +++ b/core/models.py @@ -23,7 +23,8 @@ def get_related_by_wikilinks(wiki_text): for wikilink in found: qmdict={'urlroot':settings.URL_ROOT,'cave':wikilink[2],'year':wikilink[1],'number':wikilink[3]} try: - qm=QM.objects.get(found_by__cave__kataster_number = qmdict['cave'], + cave_slugs = CaveSlug.objects.filter(cave__kataster_number = qmdict['cave']) + qm=QM.objects.get(found_by__cave_slug__in = cave_slugs, found_by__date__year = qmdict['year'], number = qmdict['number']) res.append(qm) @@ -240,17 +241,29 @@ class LogbookEntry(TroggleModel): #author = models.ForeignKey(PersonExpedition,blank=True,null=True) # the person who writes it up doesn't have to have been on the trip. # Re: the above- so this field should be "typist" or something, not "author". - AC 15 jun 09 #MJG wants to KILL THIS, as it is typically redundant with PersonTrip.is_logbook_entry_author, in the rare it was not redundanty and of actually interest it could be added to the text. - title = models.CharField(max_length=settings.MAX_LOGBOOK_ENTRY_TITLE_LENGTH) - cave = models.ForeignKey('Cave',blank=True,null=True) - place = models.CharField(max_length=100,blank=True,null=True,help_text="Only use this if you haven't chosen a cave") - text = models.TextField() - slug = models.SlugField(max_length=50) - filename= models.CharField(max_length=200,null=True) + title = models.CharField(max_length=settings.MAX_LOGBOOK_ENTRY_TITLE_LENGTH) + cave_slug = models.SlugField(max_length=50) + place = models.CharField(max_length=100,blank=True,null=True,help_text="Only use this if you haven't chosen a cave") + text = models.TextField() + slug = models.SlugField(max_length=50) + filename = models.CharField(max_length=200,null=True) class Meta: verbose_name_plural = "Logbook Entries" # several PersonTrips point in to this object ordering = ('-date',) + + def __getattribute__(self, item): + if item == "cave": #Allow a logbookentries cave to be directly accessed despite not having a proper foreignkey + return CaveSlug.objects.get(slug = self.cave_slug).cave + return super(LogbookEntry, self).__getattribute__(item) + + def __init__(self, *args, **kwargs): + if "cave" in kwargs.keys(): + if kwargs["cave"] is not None: + kwargs["cave_slug"] = CaveSlug.objects.get(cave = kwargs["cave"], primary = True).slug + kwargs.pop("cave") + return super(LogbookEntry, self).__init__(*args, **kwargs) def isLogbookEntry(self): # Function used in templates return True diff --git a/core/views_caves.py b/core/views_caves.py index ae5f46f..2590cf1 100644 --- a/core/views_caves.py +++ b/core/views_caves.py @@ -1,4 +1,4 @@ -from troggle.core.models import Cave, CaveAndEntrance, Survey, Expedition, QM, CaveDescription, Entrance, Area +from troggle.core.models import CaveSlug, Cave, CaveAndEntrance, Survey, Expedition, QM, CaveDescription, EntranceSlug, Entrance, Area from troggle.core.forms import CaveForm, CaveAndEntranceFormSet, VersionControlCommentForm, EntranceForm import troggle.core.models as models import troggle.settings as settings @@ -94,13 +94,22 @@ def caveSlug(request, slug): @login_required_if_public def edit_cave(request, slug=None): - cave = Cave.objects.get(caveslug__slug = slug) + if slug is not None: + cave = Cave.objects.get(caveslug__slug = slug) + else: + cave = Cave() if request.POST: form = CaveForm(request.POST, instance=cave) ceFormSet = CaveAndEntranceFormSet(request.POST) versionControlForm = VersionControlCommentForm(request.POST) if form.is_valid() and ceFormSet.is_valid() and versionControlForm.is_valid(): - cave = form.save() + cave = form.save(commit = False) + cave.filename = form.cleaned_data["slug"] + ".html" + cave.save() + form.save_m2m() + if slug is None: + cs = CaveSlug(cave = cave, slug = form.cleaned_data["slug"], primary = True) + cs.save() ceinsts = ceFormSet.save(commit=False) for ceinst in ceinsts: ceinst.cave = cave @@ -121,12 +130,22 @@ def edit_cave(request, slug=None): @login_required_if_public def editEntrance(request, slug=None): - entrance = Entrance.objects.get(entranceslug__slug = slug) + if slug is not None: + entrance = Entrance.objects.get(entranceslug__slug = slug) + else: + entrance = Entrance() if request.POST: form = EntranceForm(request.POST, instance = entrance) versionControlForm = VersionControlCommentForm(request.POST) if form.is_valid() and versionControlForm.is_valid(): - entrance = form.save() + entrance = form.save(commit = False) + entrance.filename = form.cleaned_data["slug"] + ".html" + if slug is None: + entrance.cached_primary_slug = form.cleaned_data["slug"] + entrance.save() + if slug is None: + es = EntranceSlug(entrance = entrance, slug = form.cleaned_data["slug"], primary = True) + es.save() entrance.writeDataFile() return HttpResponseRedirect("/" + entrance.url) else: |