J'ai une application portfolio qui répertorie les projets et leurs pages détaillées. Chaque projet a généralement la même information (galerie, etc.), mais parfois l'utilisateur peut vouloir ajouter des informations supplémentaires pour un projet particulièrement important, peut-être une page supplémentaire sur le financement de cette page par exemple. Est-il possible de créer un modèle de pages à plat remplacées dans mon application de portefeuille qui oblige les pages flat créées dans cette application à toujours commencer par/portfolio/project-name/flat-page. Je pourrais alors simplement passer les liens vers les flatpages associés au projet vers le template afin que toute page flat générée par l'utilisateur soit automatiquement liée à partir de la page du projet.Étendre les pages flat pour une application spécifique
EDIT
Je l'ai travailler un peu maintenant
J'écrasent le modèle flatpage dans mon application de portefeuille comme décrit:
from django.contrib.flatpages.models import FlatPage
from project import Project
from django.db import models
from django.contrib.sites.models import Site
class ProjectFlatPage(FlatPage):
prefix = models.CharField(max_length=100)
project = models.ForeignKey(Project)
qui me permet d'associer cette flatpage avec projet particulier,
Ensuite, je écraser la méthode de sauvegarde pour écrire tous les suppléments dans formation lorsqu'un utilisateur enregistre (doit être tondu):
def save(self, force_insert=False, force_update=False):
self.url = u"%s%s/" % (self.project.get_absolute_url(),self.prefix)
self.enable_comments = False
self.registration_required = False
self.template_name = 'project/project_flatpage.html'
super(FlatPage, self).save(force_insert, force_update)
et je scaleback l'administrateur juste laisser les choses importantes:
class ProjectFlatPageForm(forms.ModelForm):
prefix = forms.RegexField(label=_("Prefix"), max_length=100, regex=r'^[a-z0-9-]+$'),
class Meta:
model = ProjectFlatPage
class ProjectnFlatPageAdmin(admin.ModelAdmin):
form = ProjectFlatPageForm
maintenant l'utilisateur peut ajouter une page à plat dans mon app et l'associer à un projet particulier.
Dans l'administration, ils suffit d'entrer une limace pour la page et il est automatiquement joint en annexe par la sauvegarde() méthode comme:/projets/nom-projet/plat pages nom/
Le problème restant est à la fin du gabarit. Je peux accéder aux informations flatpage normales à travers les balises de modèles donnés {{flatpage.title}} et {{flatpage.content}} mettre je n'ai pas accès aux champs supplémentaires du modèle hérité (ie le champ de projet)
Y a-t-il de toute façon autour de ça?
EDIT2
Après avoir pensé, le plus simple est d'écrire une étiquette de modèle pour trouver le projectFlatPage associé au flatpage et avoir accès à partir de là. Un peu comme l'écrasement des balises du template flatpages par défaut