--- url: /camomilla-core/QuickStart.md --- # πŸš€ Bootstrap your project Ready to start building amazing things with camomilla? This guide will help you to setup your project in a few steps! ## πŸ“¦ Quick Setup ::: tip Env Virtualization πŸ‘Ύ Use a virtualenv to isolate your project's dependencies from the system's python installation before starting. Check out [virtualenvwrapper](https://virtualenvwrapper.readthedocs.io/en/latest/) for more information. ::: Install django-camomilla-cms and django from pip ```bash $ pip install django $ pip install django-camomilla-cms>=6.0.0 ``` Create a new django project ```bash $ django-admin startproject $ cd ``` Create a dedicated folder for camomilla migrations ```bash $ mkdir -p camomilla_migrations $ touch camomilla_migrations.__init__.py ``` Create migrations and prepare the database ```bash $ python manage.py makemigrations camomilla $ python manage.py migrate ``` Add camomilla and camomilla dependencies to your project's INSTALLED\_APPS ```python # /settings.py INSTALLED_APPS = [ ... 'camomilla', # always needed 'camomilla.theme', # needed to customize admin interface 'djsuperadmin', # needed if you whant to use djsuperadmin for contents 'modeltranslation', # needed if your website is multilanguage (can be added later) 'rest_framework', # always needed 'rest_framework.authtoken', # always needed ... ] ``` Run the server ```bash $ python manage.py runserver ``` --- --- url: /camomilla-core/How to.md --- # Index This documentation is a step-by-step guide to help you get started with the main camomilla features. It is divided into "How to .." sections, each one covering a specific topic. * [πŸ“ Use Pages ](Use%20Pages/) * [🌱 Use Page Lifecycle](Use%20Page%20Lifecycle/) * [🧩 Use Pages Context](Use%20Pages%20Context/) * [🎭 Use Modeltranslation](Use%20Modeltranslation/) * [🐝 Use API](Use%20API/) * [πŸ–ΌοΈ Use Media](Use%20Media/) * [🍜 Use Menu](Use%20Menu/) * [🧬 Use StructuredJSONField](Use%20StructuredJSONField/) * [πŸ—‚οΈ Use Meta Models](Use%20Meta%20Models/) * [βš™οΈ Use Settings](Use%20Settings/) * [πŸš€ Use Astro Integration](Use%20Astro%20Integration/) Feel free to suggest new topics by opening an issue on the [issue tracker](https://github.com/camomillacms/camomilla-core/issues). --- --- url: /camomilla-core/How to/Use Pages.md --- # πŸ“ Use Pages ## πŸ“Ž The Page Model Camomilla has it's own page model. The page model has an attribute for every relevant data in a web page. It takes care of SEO data and permalinks and template, and exposes jsonfields to manage additional data. ::: tip Pages have a publish lifecycle 🌱 A page's visibility is **derived from timestamps** β€” `published_at` (per language: when it goes live) and a global `deleted_at` (soft-delete) β€” rather than a `status` column. Pages also come with drafts, scheduling, preview, and optional revisions: a new page starts as a **draft** and isn't served publicly until published. See [🌱 Use Page Lifecycle](../Use%20Page%20Lifecycle/README.md) for the full workflow. ::: To use camomilla pages you need to add the dynamic url resolver at the end of your website urlpatterns: ```python # /urls.py urlpatterns += path('', include("camomilla.dynamic_pages_urls")) ``` To handle multilanguage pages use: ```python # /urls.py urlpatterns += i18n_patterns( path('', include("camomilla.dynamic_pages_urls")), prefix_default_language=False ) ``` This resolver is made to check any permalink that does not match anything in the url pattern and look in the database for a page with that permalink. ::: warning Beware! The `dynamic_pages_urls` handler should always be the last handler of your urlpatterns list. ::: ### Choose the template The page model has a field that determines which html template to use for rendering. The default value is `defaults/pages/default.html`. If a value is stored in this field it will be used. The rendering part is yelded by the default [django template engine](https://docs.djangoproject.com/en/4.2/topics/templates/). The default value can be changed with a setting: ```python # /settings.py CAMOMILLA = { "RENDER": { "PAGE": {"DEFAULT_TEMPLATE": "website/my_template.html" }} } ``` ### Add template data ::: warning Beware! [🧩 Use Page Context](../Use%20Pages%20Context/README.md) to inject context in a more safe way. ::: The data that will be available in the rendering engine should be saved in the template\_data field. This field is a django JSONField. So it will accept any json structure. The data in this field will be accessible inside the template through `page.template_data`. If you need to enrich the template context with other data that are not stored in the template data you can provide an `inject_context` function in camomilla settings: ```python # /settings.py # import from external file from my_project_app.template_rendering import page_inject_context # or define explicitly in settings def page_inject_context(request, super_ctx): from my_project_app.models import Category return {"all_categories": Category.objects.all()} # the all_category values will be accessible inside the template context. CAMOMILLA = { "RENDER": { "PAGE": {"INJECT_CONTEXT": page_inject_context }} } ``` ### Typed template\_data By default `template_data` is a plain `JSONField` accepting any structure. For richer editing you can **redeclare it on a custom page model** with a [`StructuredJSONField`](../Use%20StructuredJSONField/README.md) schema: the admin gets a structured form, the API gets validated payloads, and URL fields can localize themselves. ```python from typing import List, Optional from camomilla.models import AbstractPage from camomilla.types import Permalink from structured.fields import StructuredJSONField from structured.pydantic.models import BaseModel class HeroBlock(BaseModel): headline: str = "" cta_label: str = "" # Permalink localizes itself to the active language on the way out. cta: Optional[Permalink] = None class FeatureBlock(BaseModel): icon: str = "" title: str = "" class HomePageData(BaseModel): hero: HeroBlock = HeroBlock() features: List[FeatureBlock] = [] def _home_default(): return HomePageData() class HomePage(AbstractPage): template_data = StructuredJSONField(schema=HomePageData, default=_home_default) class PageMeta: default_template = "website/pages/home.html" ``` Use [`camomilla.types.Permalink`](../Use%20StructuredJSONField/README.md#permalink-field-typed-links) for any field that stores a navigation target. Its `url` computed field resolves to the active-language routerlink, so on `/it/` a link to the about page comes back as `/it/about/` with no work on the consumer's side: ```html {% if page.template_data.hero.cta %} {{ page.template_data.hero.cta_label }} {% endif %} ``` ::: warning Register translations If you want `template_data` (and the other inherited fields) translated per-language on a custom page model, register it with `AbstractPageTranslationOptions` β€” see [🌍 Use Modeltranslation](../Use%20Modeltranslation/README.md). Otherwise modeltranslation falls back to the single base column and different locales overwrite each other on save. ::: #### Localizing raw-string permalinks in templates When `template_data` stays a plain `JSONField` (no schema) and you store a navigation target as a bare permalink string (e.g. `"/about"`), the `localized_url` template tag resolves it to the active-language URL at render time: ```html {% load camomilla_filters %} CTA ``` It looks up the matching `UrlNode` and returns its routerlink (so `/about` becomes `/it/about/` while Italian is active); strings that don't resolve β€” typos, external links, `mailto:` β€” pass through unchanged. When a `request` is in the template context (the standard request context processor puts it there), the returned URL is **absolute**; otherwise it's root-relative. ### Set the permalink By default camomilla Page autogenerates it's permalink by slugification of the SEO title. If the page has a `parent_page` field and a page model associated with it, the permalink will be generated as a concatenation of the parent page permalink and the current page slug. For example to generate the permalink `page_1/page_2` you will need to create 2 Pages, one with title `Page 1` and one with the title `Page 2` then set the first page as the parent page of the second and save it. Otherwise, you can set the permalink manually by setting the `permalink` field. Manual permalink modification is available only if `autopermalink` field is set to `False`. While editing in django admin, if the user manually sets the permalink, the `autopermalink` field will be set to `False` automatically. ## πŸ–‡οΈ The AbstractPage Model Camomilla comes with an `AbstractPage` model. AbstractPage is different from Page model, it is Abstract. This means that the AbstractPage by itself does not create a database table. The only whay an AbstractPage can have its own db table is to be inherited by a concrete model like this: ```python from camomilla.models import AbstractPage class MyPageModel(AbstractPage): # ... custom logic there pass ``` The AbstractPage contains all the logics of Page model. This means that you can override anything and define multiple custom page models. This is very usefull if you need to build complex sites, where you can have also other kid of data that need to be rendered and treated like a page (es. product, category, blog, anything..). You can also define some intresting properties when you are defining your own page model.: ### Define page options with PageMeta Many "settings" of the page model are stored inside a `PageMeta` class like this: ```python from camomilla.models import AbstractPage class MyPageModel(AbstractPage): class PageMeta: parent_page_field = "parent_page" default_template = "website/my_template.html" def inject_context_func(request, super_ctx): from my_project_app.models import Category return {"all_categories": Category.objects.all()} ``` From PageMeta class you can define: * `parent_page_field` ==> set a different propery to store page parent. Like `category` or anything else. * `default_template` ==> set a different default template. * `inject_context_func` ==> add more data inside template context ::: warning Beware! [🧩 Use Page Context](../Use%20Pages%20Context/README.md) to inject context in a more safe way. ::: ### Override the page context This has almost the same functionality of `inject_context_func` PageMeta option but it runs at a more deep level. Overriding this will override the context and not only add things to it. ```python from camomilla.models import AbstractPage class MyPageModel(AbstractPage): def get_context(request): from my_project_app.models import Category return {"page": self, "all_categories": Category.objects.all()} ``` We suggest to always return `{ "page": self }` in the context. ## 🌐 Build a sitemap.xml To build a sitemap.xml you can use the standard django sitemap framework. Camomilla comes with a `CamomillaPageSitemap` class that you can use to include camomilla pages in your sitemap.xml. ```python # /sitemap.py from django.contrib.sitemaps import Sitemap from camomilla.sitemaps import CamomillaPageSitemap # declare your custom sitemaps class StaticViewSitemap(Sitemap): def items(self): return ['home', 'about', 'contact'] def location(self, item): return reverse(item) sitemaps = { 'pages': CamomillaPageSitemap, # add the camomilla sitemap 'static': StaticViewSitemap, # add your custom sitemaps to the camomilla sitemaps } ``` ```python # /urls.py from django.contrib.sitemaps.views import sitemap from .sitemap import sitemaps urlpatterns += [ path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap') ] ``` To customize the camomilla sitemap you can override the `CamomillaPageSitemap` class. Overriding this class will allow you to customize changefreq, priority and also items. ```python from camomilla.sitemaps import CamomillaPageSitemap class MyCamomillaPageSitemap(CamomillaPageSitemap): changefreq = "monthly" priority = 0.5 def items(self): return super().items().filter(...) ``` ::: tip Lifecycle-aware filtering There is no `status` database column β€” a page's lifecycle is derived from its timestamps. On **page** querysets `.filter(status="PUB")` / `.exclude(status="TRS")` / `.filter(is_public=True)` still work (the manager rewrites them into timestamp conditions), and the explicit helpers `.public()` / `.alive()` / `.trashed()` / `.draft()` / `.scheduled()` express the same intent more clearly. (`order_by`/`values("status")` need `.with_lifecycle()`.) Note the sitemap's `items()` yields `UrlNode` objects (see the note below), not pages. See [🌱 Use Page Lifecycle](../Use%20Page%20Lifecycle/README.md#πŸ”Ž-queryset-helpers). ::: Remember that items is a queryset of `UrlNode` objects and to access the page model you need to use the `page` property of the `UrlNode` object. ## πŸ—‚οΈ Pages router API endpoint ::: warning Beware! If you need to create an api endpoint for a model inheriting from the `AbstractPage` model remember to use inside the serializer the `AbstractPageMixin`. ::: Camomilla comes with a builtin pages router endpoint that allows you to browse your pages by url. **URL Structure:** * `api/camomilla/pages-router/` You provide as `page_url` the **full public path of the page, including any language prefix** β€” exactly the URL a visitor would type. The router derives the language from that prefix (the same way Django's `i18n_patterns` does on the HTML route), looks up the page, and serves it already translated into that language: * `/api/camomilla/pages-router/about` β†’ the about page in the default language * `/api/camomilla/pages-router/it/about` β†’ the about page in Italian When no language prefix is present, the default language is used. If the requested permalink doesn't exist in the resolved language, the endpoint returns a `404`. ::: tip Canonical redirects The router enforces canonical URLs. A request whose form differs from the canonical one (missing trailing slash, bare `/it` instead of `/it/`, etc.) returns a redirect descriptor in the body β€” `{"redirect": "/it/about/", "status": 301}` β€” rather than the page payload, so external renderers stay on a single canonical URL per page. ::: ::: warning Editor previews `pages-router` always serves the **public** state of a page β€” trashed, draft and scheduled pages return `404`. To preview unpublished content (with any pending draft overlaid), authenticated editors use the mirror endpoint `api/camomilla/pages-router-preview/`, which bypasses the public gate. See [🌱 Use Page Lifecycle](../Use%20Page%20Lifecycle/README.md) for the full drafting / preview / scheduling workflow. ::: **Simple Response:** ```json { "id": 1, "is_public": false, "status": "DRF", "indexable": true, "alternates": { "it": "/", "en": "/en/" }, "permalink": "/", "related_name": "camomilla_page", "breadcrumbs": [ { "permalink": "/", "title": null } ], "routerlink": "/", "template": "website/home.html", "title": null, "description": null, "og_description": null, "og_title": null, "og_type": null, "og_url": null, "canonical": null, "meta": {}, "date_created": "2023-09-07T13:16:24.762269Z", "date_updated_at": "2023-09-08T17:38:03.155480Z", "breadcrumbs_title": null, "slug": null, "template_data": {}, "identifier": "4ee68c88-dd1a-4515-bf50-7839f2cf1e72", "pubblication_date": null, "ordering": 0, "og_image": null, "url_node": { "id": 46, "permalink": "/", "related_name": "camomilla_page" }, "parent_page": null } ``` The respose will not include field translations since the response has the content already translated in the active language. But if you need also some other language you can specify the `included_translations` parameter in the request. `/api/camomilla/pages-router/?included_translations=it` The `included_translations` parameter accepts a comma separated list of languages or the value `all` to include all the translations. --- --- url: /camomilla-core/How to/Use Page Lifecycle.md --- # 🌱 Use Page Lifecycle Camomilla pages have a **derived lifecycle** plus a dedicated drafting and scheduling workflow: edit without touching the live site, preview pending changes, plan content swaps for a future moment, and (optionally) keep a full revision history. There is **no `status` column**. A page's lifecycle state is computed from two timestamps β€” `published_at` (translatable: when *this language* goes live) and `deleted_at` (global: soft-delete) β€” combined with the separate `Draft` table for pending edits. ## 🚦 Lifecycle states | State | Code | When | |---|---|---| | Published | `PUB` | `deleted_at` is null **and** `published_at <= now()` for the active language | | Draft | `DRF` | `deleted_at` is null **and** `published_at` is null | | Planned | `PLA` | `deleted_at` is null **and** `published_at > now()` (first publish scheduled for the future) | | Trashed | `TRS` | `deleted_at` is set (applies to **every** language at once) | You read the state from a page instance: ```python page.status # "PUB" / "DRF" / "PLA" / "TRS" (for the active language) page.is_public # True only when status == "PUB" ``` `published_at` is **per-language**: a page can be live in Italian and still a draft in English. `deleted_at` is **global**: trashing hides every language. ## πŸ‘€ Public vs. preview Every public surface serves only the **public** state of a page. Trashed, draft, and planned pages return `404` everywhere: * **HTML render route** (`dynamic_pages_urls`) * **JSON router** β€” `GET /api/camomilla/pages-router/` To look at unpublished content, authenticated editors use the **preview** surfaces, which bypass the public gate and overlay any pending draft: | Surface | What it serves | |---|---| | `GET /api/camomilla/pages-router-preview/` | JSON, by URL β€” the mirror of `pages-router` for headless frontends | | `GET /api/camomilla/pages/{id}/preview/` | JSON, by id β€” live page + draft overlay merged per language | | `GET /api/camomilla/pages/{id}/render/` | HTML, by id β€” renders the page template with `draft_data` in context | ::: tip Headless preview `pages-router-preview` returns the same payload shape as `pages-router`, so a headless frontend can resolve a page by URL for preview with a single request β€” no list-then-detail round trip. The [Astro integration](../Use%20Astro%20Integration/README.md) speaks this endpoint directly β€” use **`@camomillacms/astro-integration` β‰₯ 0.7** with camomilla 6.5. ::: ## ✏️ Drafts A **draft** is a staged future state of a page, stored in a dedicated `Draft` table β€” **one pending draft per page, per language**. The draft body is shaped like a partial `PATCH` on the page; publishing replays it onto the live row. The presence of a draft does **not** change the page's lifecycle label β€” a published page with a pending draft is still `PUB`. Observe drafts explicitly: ```python page.has_draft # a pending draft exists for the active language page.has_scheduled_draft # …and it has a scheduled_for moment page.draft_data # the pending draft payload (dict), or {} ``` ### Editor API actions All page-lifecycle actions live on the standard pages viewset and require staff authentication. | Endpoint | Method | Purpose | |---|---|---| | `/api/camomilla/pages/{id}/draft/` | `PATCH` / `PUT` | Save the active-language draft. `PATCH` merges into the existing payload; `PUT` replaces it wholesale. | | `/api/camomilla/pages/{id}/discard-draft/` | `POST` | Delete the active-language draft row. | | `/api/camomilla/pages/{id}/publish/` | `POST` | Apply the active-language draft (if any) and stamp `published_at = now()`. Optional body `{"comment": "…"}`. | | `/api/camomilla/pages/{id}/schedule/` | `POST` | Body `{"publish_at": ""}` β€” see [Scheduling](#⏰-scheduling). | | `/api/camomilla/pages/{id}/preview/` | `GET` | Author-only JSON: live page + draft overlay. | | `/api/camomilla/pages/{id}/render/` | `GET` | Author-only HTML: page template rendered with `draft_data`. | | `/api/camomilla/pages/{id}/revisions/` | `GET` | List revision snapshots (see [Revisions](#πŸ•°οΈ-revisions-optional)). | | `/api/camomilla/pages/{id}/revert/{version_id}/` | `POST` | Roll back to a revision. | ::: warning Drafts are per active language The draft endpoints always act on the **active language** (resolved from the request the same way the rest of camomilla resolves it). A payload that carries both `translations.en` and `translations.it` lands wholesale in the active language's draft row, and publishing that language applies only what its row carries. ::: ## ⏰ Scheduling Schedule a publish moment with `POST /api/camomilla/pages/{id}/schedule/` and a body of `{"publish_at": ""}`. The behavior depends on whether the active language has ever been public: * **Never public** (`published_at` is null) β†’ sets `published_at = publish_at`. The page becomes `PLA` (Planned) and the **live row itself** is what appears at that moment. No draft required. * **Already public** β†’ attaches `scheduled_for = publish_at` to the existing draft (save it first via `/draft/`). The live content stays visible until the moment passes, then the draft's payload swaps in. ### Lazy materialization When a scheduled moment passes, the swap happens **lazily on first read**: the first public visitor of that page (HTML or JSON router) applies the due draft, refreshes the page, and serves the new content. Concurrent readers see the page already flipped. No background worker is strictly required for pages that get traffic. ### Cron safety net β€” `camomilla_publish_scheduled` For pages that nobody visits, run the management command on a schedule (cron, Celery beat, systemd timer): ```bash python manage.py camomilla_publish_scheduled # preview what would be published without changing anything python manage.py camomilla_publish_scheduled --dry-run ``` It applies every draft whose `scheduled_for` moment has passed, activating the right language for each so the `published_at` stamp lands in the correct per-language column. Idempotent and safe to run frequently. ## πŸ—‘οΈ Trashing and per-language dismiss Trashing is a **global** soft-delete β€” it hides every language and is reversible: ```python page.trash() # soft-delete: deleted_at = now(); status becomes "TRS" page.restore() # undo: deleted_at = None; status returns to whatever the timestamps describe ``` To dismiss (`404`) **only one language** without touching the others, clear that language's `published_at` β€” it's translatable: ```python from camomilla.utils import set_nofallbacks # 404 the English page, keep Italian (and any other language) live set_nofallbacks(page, "published_at", None, language="en") page.save() ``` `deleted_at` is intentionally **not** translatable: there is no "trash only one language" β€” use the per-language `published_at` for that. ## πŸ•°οΈ Revisions (optional) Revision history is powered by [`django-reversion`](https://django-reversion.readthedocs.io/) and is **opt-in**. When enabled, `publish()`, scheduled publishes, and reverts all create revision snapshots, and the `/revisions/` and `/revert/{version_id}/` endpoints become functional. Without it, those two endpoints return `501 Not Implemented` and the rest of the lifecycle works unchanged. To enable it: ```python # settings.py INSTALLED_APPS = [ # … "reversion", ] ``` ```bash python manage.py migrate ``` Camomilla auto-registers every concrete `AbstractPage` model with reversion at startup β€” you don't need to register your page models by hand. ## πŸ”Ž QuerySet helpers `Page.objects` (and any `AbstractPage` manager) expose lifecycle-aware filters. All of them respect the active language for `published_at`: ```python Page.objects.public() # deleted_at IS NULL AND published_at <= now() Page.objects.alive() # deleted_at IS NULL Page.objects.trashed() # deleted_at IS NOT NULL Page.objects.draft() # has any pending Draft (any language) Page.objects.scheduled() # has a scheduled Draft OR published_at > now() Page.objects.due_for_publish() # has a Draft with scheduled_for <= now() Page.objects.first_publish_pending() # never-public with a future published_at Page.objects.with_lifecycle() # annotates the computed status for ORDER BY / .values() ``` ## 🧰 Programmatic API Every editor action has a model-level counterpart, handy for data migrations, management commands, and tests: ```python page.save_draft({"translations": {"en": {"title": "edited"}}}) # stage an edit (active language) page.save_draft({"title": "edited"}, scheduled_for=when) # stage and schedule the swap page.discard_draft() # delete the draft row page.publish(comment="Editor approved") # apply draft + mark live page.schedule(when) # schedule (see semantics above) page.trash() # soft-delete (global) page.restore() # undo trash page.list_revisions() # reversion history (if enabled) page.revert_to_revision(version_id) # rollback (if enabled) ``` --- --- url: /camomilla-core/How to/Use Pages Context.md --- # 🧩 Use Pages Context With new page models we lost the ability to write view functions. Then we are giving you a way to inject more context inside a page in a simple manner. You are going to apply the registration approach. The game rules are simple, first of all: * Make a file called `template_context.py` in your app directory. Camomilla is built to autodiscover those files. Inside the file you can provide context with the register function in 2 different ways. ### Template based registration To register some additional context to a specific template wite in the template\_context.py file the following: ```python from camomilla.templates_context.rendering import register from camomilla.models import Media @register("website/home.html") def home_page(): return { "title": "My fantastic title", "content": "My wanderfull content", "media_gallery": Media.objects.all(), } ``` ### Model based registration To register some additional context to a specific page wite in the template\_context.py file the following: ```python from camomilla.templates_context.rendering import register from camomilla.models import Media, Page @register(page_model=Page) def home_page(): return { "title": "My fantastic title", "content": "My wanderfull content", "media_gallery": Media.objects.all(), } ``` ### Additional \*\*kwargs You can access to two usefull kwargs in template\_context functions. The request kwarg contains the django http request. The super\_ctx kwarg contains the context coming from upper functions or camomilla default context ```python from camomilla.templates_context.rendering import register from camomilla.models import Media, Page @register(page_model=Page) def home_page(request, super_ctx): # your custom code can use request or super_ctx to provide more precise context return { "title": "My fantastic title", "content": "My wanderfull content", "media_gallery": Media.objects.all(), } ``` --- --- url: /camomilla-core/How to/Use StructuredJSONField.md --- # 🧬 Use Structured JSON Field #### powered by [Django Structured Field](https://github.com/bnznamco/django-structured-field) The [`StructuredJSONField`](https://github.com/bnznamco/django-structured-field) is a special type of field that allows you to create a structured JSONField. This kind of field allows you to declare a data structure that will be enforced to the json structure. To declare a data structure you need to create a class that inherits from `structured.pydantic.models.BaseModel` and declare the fields that you want to use. The Base model is a pydantic model, so you can use all the pydantic features. If you never used pydantic before, you can find the documentation [here](https://pydantic-docs.helpmanual.io/). Let's see an example: ```python from structured.pydantic.models import BaseModel from structured.fields import StructuredJSONField class MyStructuredJSONField(BaseModel): name: str age: int class MyModel(models.Model): structured_field = StructuredJSONField(schema=MyStructuredJSONField) ``` In this example we created a model with a StructuredJSONField that will accept only jsons with the following structure: ```json { "name": "string", "age": 0 } ``` If you try to save a json with a different structure, the field will raise a `ValidationError`. ### Default value Since the StructuredJSONField is a JSONField, you can use all the JSONField features, like the `default` parameter: ```python from structured.pydantic.models import BaseModel from structured.fields import StructuredJSONField class MyStructuredJSONField(BaseModel): name: str age: int class MyModel(models.Model): structured_field = StructuredJSONField(schema=MyStructuredJSONField, default={"name": "John", "age": 30}) ``` In this example we set a default value for the field. If you try to save a json without the `name` or `age` fields, the field will be populated with the default value. You can also use a generator as default value: ```python from structured.pydantic.models import BaseModel from structured.fields import StructuredJSONField class MyStructuredJSONField(BaseModel): name: str age: int def default_value(): return {"name": "John", "age": 30} class MyModel(models.Model): structured_field = StructuredJSONField(schema=MyStructuredJSONField, default=default_value) ``` In this example we used a function as default value. The function will be called every time a new instance of the model is created. ## Nesting Models Structured models can be nested. Let's see an example: ```python from camomilla.structured import BaseModel class MyNestedModel(BaseModel): name: str age: int class MyOtherNestedModel(BaseModel): name: str age: int children: MyNestedModel childrens: List[MyNestedModel] ``` If you need to nest recursively a model, for example a model that as itself as children, you can declare the type as a string: ```python from camomilla.structured import BaseModel class MyNestedModel(BaseModel): name: str age: int children: 'MyNestedModel' childrens: List['MyNestedModel'] ``` ## List of StructuredJSONField If you use a list as a default value, the field will adapt the schema to accept a list of the specified type: ```python from structured.pydantic.models import BaseModel from structured.fields import StructuredJSONField class MyStructuredJSONField(BaseModel): name: str age: int class MyModel(models.Model): structured_field = StructuredJSONField(schema=MyStructuredJSONField, default=list) ``` ## Foreign Key Field There are some special features that you can use with the StructuredJSONField. If you declare a field with a django model as type, the field will be populated with the instance of the model, as it was a foreign key: ```python from structured.pydantic.models import BaseModel from structured.fields import StructuredJSONField from django.contrib.auth.models import User class MyStructuredJSONField(BaseModel): name: str age: int user: User ``` At database level the json will store only the model primary key, but when you access the field you will get the instance of the model. Hence we have a fully working relation inside a json field. ## QuerySet Field You can also use an other special type of field: `camomilla.structured.QuerySet`. This field will store a queryset inside the json field. This is useful when you need to store a list of models. For example: ```python from structured.pydantic.models import BaseModel from structured.fields import StructuredJSONField from structured.pydantic.fields import QuerySet from django.contrib.auth.models import User class MyStructuredJSONField(BaseModel): name: str age: int users: QuerySet[User] ``` In this example we declared a field that will store a list of users. The field will be populated with a queryset, so you can use all the django queryset features. In the json structure the field will store only the primary keys of the models, ordered by the queryset order or insertion order. When you access the django queryset, the order will be preserved. This means that you can manage queryset ordering just saving the json with data in correct order. ## Permalink field (typed links) Camomilla ships a ready-made structured type for **links**: `camomilla.types.Permalink`. Use it whenever a schema field holds a navigation target, instead of a bare `str`. It's the same type that powers menu nodes (`MenuNode.link`). ```python from typing import Optional from camomilla.types import Permalink, LinkTypes from structured.pydantic.models import BaseModel class HeroBlock(BaseModel): headline: str = "" cta_label: str = "" cta: Optional[Permalink] = None ``` `Permalink` is a small **polymorphic** model β€” a single field that can hold either of two kinds of link, distinguished by its `link_type`: * **`LinkTypes.relational`** (`"RE"`) β€” a foreign key to a camomilla `UrlNode` (the editor picks a real page). The JSON stores the `UrlNode` **primary key**, not a URL string. * **`LinkTypes.static`** (`"ST"`) β€” a free-form URL string for anything that isn't an internal page: external links, `mailto:`, `tel:`, in-page anchors. ### Why use it instead of a string? * **Referential integrity.** A relational link tracks the *row*, not the URL. Rename the target page and the link still resolves; delete the target and the FK simply nulls instead of silently breaking. * **Per-language URLs for free.** Each `Permalink` exposes a read-only `url` computed field that resolves to the active-language routerlink β€” honoring `i18n_patterns` (adds the `/it/` prefix) and `APPEND_SLASH` (trailing slash). The same stored value renders `/about/` on the default language and `/it/about/` while Italian is active, with **no consumer-side i18n logic**. * **No round-trip corruption.** `url` is *derived*, never stored. Reading the API response and writing it back stores the same struct unchanged. ### The serialized shape ```json { "link_type": "RE", "url_node": 4, "page": { "id": 4, "name": "About us", "model": "website.page" }, "url": "/it/about/" } ``` `page` and `content_type` are auto-derived from `url_node` β€” editors only ever set `link_type` plus `static` or `url_node`. Bind your frontend's `href` to `url` (never to `static` directly, so relational links keep working). ### Constructing one in code ```python from camomilla.types import Permalink, LinkTypes # relational β€” points at a camomilla page via its UrlNode cta = Permalink(link_type=LinkTypes.relational, url_node=about_page.url_node) # static β€” any external/non-page URL cta = Permalink(link_type=LinkTypes.static, static="https://example.com") ``` ### Absolute vs relative URLs The `url` computed field is always **root-relative** (`/it/about/`) β€” a computed field can't reach the serialization context, so there's no request to build an absolute URI from. When you need an absolute link (sitemaps, emails, server-rendered templates), call `get_url(request)` instead: ```python link.url # "/it/about/" (root-relative) link.get_url(request=req) # "https://host/it/about/" (absolute) ``` ## Built-in cache system Both Foreign Key and QuerySet fields can lead to performance issues. If you have a lot of instances of django models spread all over the json, the field will make several queries to the database to retrieve the related models. The structured field has a built-in cache system to avoid this problem πŸŽ‰. The cache system will analyze the json and will make only the stricly necessary queries to the database. The cache system is enabled by default, but you can disable it from camomilla settings: ```python # settings.py CAMOMILLA = { "STRUCTURED_FIELD": { "CACHE_ENABLED": False } } ``` --- --- url: /camomilla-core/How to/Use Meta Models.md --- # πŸ—‚οΈ Use Meta Models Meta models let **editors define new content types at runtime** via the admin β€” no new Django models or migrations required. A **MetaType** declares a list of typed fields; a **MetaInstance** holds concrete data validated against the chosen type. Typical use cases: FAQs, testimonials, team members, product specs, pricing tables β€” any schema that varies per project or needs to evolve without developer involvement. *** ## How it works 1. An editor creates a **MetaType** (e.g. `faq`) and declares its fields using a structured editor in the admin. 2. The editor creates **MetaInstance** records selecting that type. The form automatically adapts to the declared fields. 3. At save time, the `data` JSON is validated against a Pydantic model compiled at runtime from the MetaType definition. 4. The frontend fetches `data` via REST API, optionally reading the JSON Schema to drive its own form rendering. *** ## Field kinds | Kind | Stored as | Notes | |---|---|---| | `string` | `str` | Single-line text | | `text` | `str` | Multi-line text | | `integer` | `int` | | | `number` | `float` | | | `boolean` | `bool` | | | `date` | ISO date string | | | `datetime` | ISO datetime string | | | `media` | PK β†’ `camomilla.Media` instance | | | `ref` | PK β†’ any installed Django model | Requires `target_model` = `"app.ModelName"` | | `group` | nested object | Requires `children` | | `list` | array of objects | Requires `children` | *** ## Creating a MetaType in the admin 1. Go to **Admin β†’ Meta types β†’ Add**. 2. Set a unique `key` (slug) and a `name`. 3. In the **Schema** editor, add field rows. Each row has: * **name** β€” the JSON key * **label** β€” human-readable label * **kind** β€” field type (see table above) * **required** / **translated** toggles * **target\_model** *(visible only when `kind = ref`)* β€” select from all installed models * **children** *(visible only when `kind = group` or `list`)* β€” nested field definitions *** ## Creating a MetaType via API ```http POST /api/camomilla/meta-types/ Content-Type: application/json { "key": "faq", "name": "FAQ", "schema": [ {"name": "question", "kind": "string", "required": true, "translated": true}, {"name": "answer", "kind": "text", "required": true, "translated": true}, {"name": "weight", "kind": "integer"} ] } ``` *** ## Creating a MetaInstance via API ```http POST /api/camomilla/meta-instances/ Content-Type: application/json { "meta_type": 1, "identifier": "faq-what-is-camomilla", "data": { "question": {"en": "What is camomilla?", "it": "Cos'Γ¨ camomilla?"}, "answer": {"en": "A headless CMS.", "it": "Un CMS headless."}, "weight": 10 } } ``` Translated fields follow the same `{"language_code": value}` format as the rest of the Camomilla API. Invalid payloads (missing required fields, wrong types) return `400` with field-level error details. *** ## Nested group and list fields ```json { "key": "product-spec", "name": "Product Spec", "schema": [ {"name": "title", "kind": "string", "required": true}, { "name": "attributes", "kind": "list", "children": [ {"name": "label", "kind": "string", "required": true}, {"name": "value", "kind": "string"} ] }, { "name": "dimensions", "kind": "group", "children": [ {"name": "width", "kind": "number"}, {"name": "height", "kind": "number"}, {"name": "depth", "kind": "number"} ] } ] } ``` The corresponding instance payload: ```json { "meta_type": 2, "data": { "title": "Widget Pro", "attributes": [ {"label": "Color", "value": "Blue"}, {"label": "Material", "value": "Aluminium"} ], "dimensions": {"width": 10.5, "height": 4.0, "depth": 2.0} } } ``` *** ## Referencing another Django model Use `kind = ref` and set `target_model` to `"app_label.ModelName"`: ```json { "name": "author", "kind": "ref", "target_model": "auth.User", "required": true } ``` The stored PK is resolved to the full object representation in API responses. *** ## Fetching the JSON Schema Frontends can request the JSON Schema for a MetaType to drive dynamic form rendering without hard-coding field lists. ```http GET /api/camomilla/meta-instances/schema/?meta_type=1 ``` Or directly from the MetaType resource: ```http GET /api/camomilla/meta-types/1/schema/ ``` Both return a standard JSON Schema object that can be fed to any JSON Schema form library. *** ## API endpoints summary | Endpoint | Method | Description | |---|---|---| | `/api/camomilla/meta-types/` | `GET` / `POST` | List or create MetaTypes | | `/api/camomilla/meta-types//` | `GET` / `PATCH` / `DELETE` | Retrieve, update or delete a MetaType | | `/api/camomilla/meta-types//schema/` | `GET` | JSON Schema for the MetaType | | `/api/camomilla/meta-instances/` | `GET` / `POST` | List or create MetaInstances | | `/api/camomilla/meta-instances//` | `GET` / `PATCH` / `DELETE` | Retrieve, update or delete a MetaInstance | | `/api/camomilla/meta-instances/schema/?meta_type=` | `GET` | JSON Schema for a given MetaType | All endpoints support the standard Camomilla query parameters (`?items`, `?sort`, `?search`, `?fields`, `?language`, `?fltr`). *** ## Schema cache The runtime Pydantic model compiled from a MetaType definition is cached per `(meta_type_id, compiled_at)`. Saving a MetaType β€” from the admin or via API β€” invalidates the cache automatically. All subsequent requests use the updated schema immediately with no server restart needed. --- --- url: /camomilla-core/How to/Use Media.md --- # πŸ–ΌοΈ Use Media Camomilla has full media management. Everything is stored in the Media model. To attach medias to a custom model just assign a ForeignKey or a ManyToMany relation. ```python class MyModel(models.Model): image = models.ForeignKey( "camomilla.Media", blank=True, null=True, on_delete=models.SET_NULL, ) gallery = models.ManyToManyField("camomilla.Media", blank=True) ``` Every media can be associated to a MediaFolder. The MediaFolder is a tree structure of folders (like a fs). The media takes care of optimizing images. The optimization consists in a resize to a max width-height and to a DPI scaling. You can disable optimization or change sizes and dpi from settings: ```python CAMOMILLA = { "MEDIA": { "OPTIMIZE": {"MAX_WIDTH": 1980, "MAX_HEIGHT": 1400, "DPI": 30, "ENABLE": True}, }, } ``` Camomilla creates also image thumbnails. You can change, thumbnails size from settings: ```python CAMOMILLA = { "MEDIA": { "THUMBNAIL": {"FOLDER": "", "WIDTH": 50, "HEIGHT": 50} }, } ``` ## πŸ“ Responsive Renditions (srcset) In addition to the single optimized original and the thumbnail, Camomilla can generate a configurable set of **responsive image renditions** β€” width-based, multi-format variants ready to be dropped into an `` or `` tag. Renditions are produced on upload (and on demand), stored next to the original, and exposed via the REST API in a shape a frontend can consume without any extra processing. ### Default configuration Out of the box, every uploaded image produces **9 renditions** (3 widths Γ— 3 formats): | Name | Width | Format | |---|---|---| | `sm-webp`, `md-webp`, `lg-webp` | 400 / 800 / 1600 | WebP | | `sm-avif`, `md-avif`, `lg-avif` | 400 / 800 / 1600 | AVIF | | `sm-original`, `md-original`, `lg-original` | 400 / 800 / 1600 | source format (JPEG/PNG) | Renditions that would upscale the original (target width β‰₯ source width) are skipped. Renditions whose encoded output is larger than the source are also skipped (inflate guard). > \[!NOTE] > AVIF requires the optional `pillow-avif-plugin` dependency. Without it, AVIF renditions are silently omitted β€” all other formats still generate. Install with `pip install "django-camomilla-cms[avif]"`. ### Settings All rendition settings live under `CAMOMILLA.MEDIA.RENDITIONS`: ```python CAMOMILLA = { "MEDIA": { "RENDITIONS": { "ENABLE": True, "FOLDER": "renditions", "VARIANTS": [ {"name": "sm-webp", "width": 400, "format": "webp"}, {"name": "md-webp", "width": 800, "format": "webp"}, {"name": "lg-webp", "width": 1600, "format": "webp"}, {"name": "sm-avif", "width": 400, "format": "avif"}, {"name": "md-avif", "width": 800, "format": "avif"}, {"name": "lg-avif", "width": 1600, "format": "avif"}, {"name": "sm-original", "width": 400, "format": "original"}, {"name": "md-original", "width": 800, "format": "original"}, {"name": "lg-original", "width": 1600, "format": "original"}, ], "JPEG_QUALITY": 85, "WEBP_QUALITY": 82, "AVIF_QUALITY": 60, "PREVENT_INFLATE": True, }, }, } ``` * **`ENABLE`** β€” master kill switch. When `False`, no renditions are generated and `media.renditions` stays `{}`. * **`VARIANTS`** β€” list of `{name, width, format}` dicts. `format` accepts `"webp"`, `"avif"`, `"jpeg"`, `"png"`, or `"original"` (keep the source format). * **`FOLDER`** β€” subfolder of `MEDIA_ROOT` where rendition files live. Each original gets its own directory: `renditions//.`. * **`PREVENT_INFLATE`** β€” when `True`, renditions larger than the original are discarded. ### Per-instance override A single Media can opt into a custom rendition set via the `renditions_config` field (JSON list, same schema as the global `VARIANTS`). Set it to `null` or an empty list to fall back to the global config. ```python media = Media.objects.get(pk=1) media.renditions_config = [ {"name": "tiny", "width": 100, "format": "webp"}, {"name": "square", "width": 600, "format": "webp"}, ] media.save() media.regenerate_renditions() ``` ### API response shape `GET /api/camomilla/media//` now returns two extra fields, `renditions` and `srcset`: ```json { "id": 6, "file": "http://mydomain.it/media/sample-image.jpg", "thumbnail": "http://mydomain.it/media/thumbnails/sample-image_thumb.jpg", "mime_type": "image/jpeg", "image_props": {"mode": "RGB", "width": 1980, "format": "JPEG", "height": 1319}, "renditions": { "sm-webp": { "url": "http://mydomain.it/media/renditions/sample-image/sm-webp.webp", "width": 400, "height": 267, "format": "webp", "size": 18432 }, "md-webp": {"url": "...", "width": 800, "height": 533, "format": "webp", "size": 52111}, "lg-webp": {"url": "...", "width": 1600, "height": 1066, "format": "webp", "size": 180032} }, "srcset": { "webp": "http://.../sm-webp.webp 400w, http://.../md-webp.webp 800w, http://.../lg-webp.webp 1600w", "avif": "http://.../sm-avif.avif 400w, ...", "original": "http://.../sm-original.jpg 400w, ..." }, "renditions_config": null } ``` * **`renditions`** β€” map keyed by variant name. Each entry has a fully qualified `url`, plus `width`, `height`, `format`, and `size` in bytes. The internal storage `path` is omitted from API output. * **`srcset`** β€” convenience map keyed by format, with values already formatted as `"url WIDTHw, url WIDTHw, ..."`. Drop the string straight into a `` attribute. ### Using renditions in a frontend Build a `` tag directly from the `srcset` payload: ```html {media.alt_text} ``` If you use Astro, the [Astro Camomilla Integration](../Use%20Astro%20Integration/) ships a ready-made `` component that consumes this shape directly. ### Regeneration endpoint Force-regenerate all renditions for a single Media (useful after changing `renditions_config` or after bulk-editing the global `VARIANTS`): **URL:** `/api/camomilla/media//regenerate-renditions/` **METHOD:** `POST` The response is the freshly re-serialized Media payload. To regenerate renditions for **every** image Media at once (e.g. after changing the global `VARIANTS`), use the management command: ```bash python manage.py regenerate_renditions ``` ### Template tags For server-rendered Django templates, `camomilla` ships a `media_extras` library: ```django {% load media_extras %} {# Single srcset string #} {{ media.alt_text }} {# Full element #} {% media_picture media alt="Hero image" sizes="(min-width: 1024px) 1600px, 100vw" class="hero-img" loading="lazy" %} {# Single rendition URL #} ``` * **`|srcset:''`** β€” filter returning a comma-joined `srcset` string for the given format. Empty string on non-images. * **`{% media_picture %}`** β€” renders a full `` with AVIF/WebP sources + fallback ``. Extra kwargs (`class`, `loading`, `decoding`, `width`, `height`, …) pass through to the ``. Degrades to a bare `` when no renditions exist. * **`{% media_srcset_url %}`** β€” returns a single rendition's URL by name. ## πŸ—‚οΈ Media API The media model has its own api methods to upload file. ::: warning Beware! Remember to add camomilla api url to your `urlpatterns`. You can find more info [here](../Use%20API/). ::: ### Upload new media **URL:** `/api/camomilla/media` **METHOD:** `POST` **MODE:** `MultipartFormData` **PAYLOAD:** ``` alt_text: Text title: Text description: Text file: Multipart File folder: Folder id ``` ### Update existing media **URL:** `/api/camomilla/media/` **METHOD:** `PUT | PATCH` **MODE:** `MultipartFormData` **PAYLOAD:** ``` alt_text: Text title: Text description: Text file: Multipart File folder: Folder id ``` ### Get media detail **URL:** `/api/camomilla/media/` **METHOD:** `GET` **Response:** ```json { "id": 6, "links": [], "is_image": true, "alt_text": null, "title": null, "description": null, "file": "http://mydomain.it/media/sample-image.jpg", "thumbnail": "http://mydomain.it/media/thumbnails/sample-image_thumb.jpg", "created": "2023-07-24T13:47:26.986873Z", "size": 680313, "mime_type": "image/jpeg", "image_props": { "mode": "RGB", "width": 1980, "format": "JPEG", "height": 1319 }, "renditions": { "sm-webp": {"url": "...", "width": 400, "height": 267, "format": "webp", "size": 18432} }, "srcset": { "webp": "http://.../sm-webp.webp 400w, http://.../md-webp.webp 800w, http://.../lg-webp.webp 1600w" }, "renditions_config": null, "folder": null } ``` See [Responsive Renditions](#-responsive-renditions-srcset) above for the full schema and configuration. ### Navigate media folders To navigate media you need to navigate folder structure. In the main url you will get all media and all folders without a parent folder (root elements). **URL:** `/api/camomilla/media-folder` **METHOD:** `GET` **Response:** ```json { "folders": [ { "id": 1, "title": "Folder 1", "slug": "folder-1", "creation_date": "2023-07-31T15:17:37.612115Z", "last_modified": "2023-07-31T15:17:37.612173Z", "path": "/folder-1", "updir": null } ], "media": { "items": [ { "id": 6, "is_image": true, "alt_text": null, "title": null, "description": null, "file": "http://mydomain.com/media/sample-image.jpg", "thumbnail": "http://mydomain.com/media/thumbnails/sample-image_thumb.jpg", "created": "2023-07-24T13:47:26.986873Z", "size": 680313, "mime_type": "image/jpeg", "image_props": { "mode": "RGB", "width": 1980, "format": "JPEG", "height": 1319 }, "folder": null, } ], "paginator": { "count": 1, "page": 1, "has_next": false, "has_previous": false, "pages": 1, "page_size": 18 } }, "parent_folder": { "title": "", "path": "", "updir": null } } ``` To navigate a subfolder just add its id to the url path: **URL:** `/api/camomilla/media-folder/` **METHOD:** `GET` The media endpoint response is always paginated. The pagination is made only for media elements. For subfolder you will get always all subfolder in a folder. --- --- url: /camomilla-core/How to/Use Menu.md --- # 🍜 Use Menu Camomilla comes with a menu system that allows you to create and render menus in your templates. To render a menu you need only to load menu tags and use the `render_menu` tag. ```html {% load menus %} ...
{% render_menu "main_menu" %}
... ``` The `render_menu` tag will create or fetch from the database a menu with the name specified in the first argument and render it using the default template. If you want to use a custom template you can specify the path to the template in the second argument. ```html {% load menus %} ...
{% render_menu "main_menu" "website/parts/menu.html" %}
... ``` ### The Default Template If no template\_path is specified, the default template will be used. The default template is very simple and looks like this: ```html {% load menus %} {% if menu.nodes|length %}
    {% for item in menu.nodes %}
  • {% if item.link.url %} {{ item.title }} {% else %} {{item.title}} {% endif %} {% include 'defaults/parts/menu.html' with menu=item %}
  • {% endfor %}
{% endif %} ``` ### Menu node links Each menu node carries a `link` of type [`camomilla.types.Permalink`](../Use%20StructuredJSONField/README.md#permalink-field-typed-links) β€” the same polymorphic link primitive you can use in any typed `template_data`. A node link is either: * **relational** β€” a foreign key to a camomilla page (`UrlNode`). It survives renames and resolves to the active-language URL. * **static** β€” a free-form URL string for external links, `mailto:`, `tel:`, anchors. In templates, resolve a node to its URL with the `node_url` filter rather than reading `link.url` directly β€” it handles both link kinds and, when you pass the request, returns an **absolute** URL: ```html {% load menus %} {{ item|node_url }} {# root-relative, e.g. /it/about/ #} {{ item|node_url:request }} {# absolute, e.g. https://host/it/about/ #} ``` `request` is available in the menu template via the standard request context processor (the menu renderer always binds it, falling back to `None`), so {{ item|node\_url:request }} is always safe to write β€” static links ignore the request and pass through verbatim. --- --- url: /camomilla-core/How to/Use Modeltranslation.md --- # 🎭 Use Modeltranslation Camomilla comes with [django-modeltranslation](https://django-modeltranslation.readthedocs.io/en/latest/index.html) installed and configured. Modeltranslation is a django app that allows you to translate your models fields. To use it, you need to add the `modeltranslation` app to your `INSTALLED_APPS` setting: ```python # /settings.py INSTALLED_APPS = [ ... "modeltranslation", ... ] ``` ## πŸͺ‘ Register your models To translate a model, you need to register in the `modeltranslation` registry. To register a model, you need to create a `translation.py` file in your django app folder and register your models there. Let's see an example: ```python # //translation.py from modeltranslation.translator import translator, TranslationOptions from .models import MyModel class MyModelTranslationOptions(TranslationOptions): fields = ("title", "description") translator.register(MyModel, MyModelTranslationOptions) ``` In this example we registered the `MyModel` model and we specified that we want to translate the `title` and `description` fields. TranslationOptions fields can be inherited from other TranslationOptions, so you can create a base TranslationOptions class and inherit from it in your models TranslationOptions. For models that inherit from camomilla AbstractPage, should use the `AbstractPageTranslationOptions` class, to inherit all needed fields to translate. ```python # //translation.py from modeltranslation.translator import translator, TranslationOptions from camomilla.translation import AbstractPageTranslationOptions from .models import MyModel class MyModelTranslationOptions(AbstractPageTranslationOptions): fields = ("title", "description") translator.register(MyModel, MyModelTranslationOptions) ``` ## 🚨 Caveats with Rest Framework If you are using [Django Rest Framework](https://www.django-rest-framework.org/) you should always declare get\_queryset in your viewsets, otherwise the statically declared queryset will not provide results in the requested language. ```python # //views.py from rest_framework import viewsets class MyModelViewSet(viewsets.ModelViewSet): queryset = MyModel.objects.all() # this will not work def get_queryset(self): return MyModel.objects.all() ``` For more information about django-modeltranslation, please refer to the [official documentation](https://django-modeltranslation.readthedocs.io/en/latest/index.html). --- --- url: /camomilla-core/How to/Use API.md --- # 🐝 Use API Camomilla comes with many api endpoint builded with Django Rest Framework. To use the endpoints you need to add the handler to the project urls.py ```python # /urls.py urlpatterns += path('api/camomilla/', include('camomilla.urls')) ``` ::: warning Beware! Remember that if you use camomilla pages `dynamic_pages_urls` handler should always be the last handler of your urlpatterns list. ::: By default every endpoint comes with a full CRUD in the style of django rest framework with some mode feature beaked in. ## 🧱 Base Classes If you need to implement your own api, we suggest to use camomilla `BaseModelSerializer` and `BaseModelViewset` as the base class of your serializer and viewset respectively. ```python class MyModelSerializer(BaseModelSerializer): class Meta: model = MyModel fields = "__all__" depth = 5 ``` ```python class MyModelViewSet(BaseModelViewset): queryset = MyModel.objects.all() serializer_class = MyModelSerializer permission_classes = (CamomillaBasePermissions,) model = MyModel search_fields = ["title", "description",] ``` This will provide to your endpoint all the features of standard camomilla api. ## πŸ–²οΈ The model\_api.register decorator If you need to create a standard api endpoint you can take advantage of model\_api register decorator. To use this aproach you need to add the model\_api handler to your project urls.py ```python # /urls.py urlpatterns += path('api/models/', include('camomilla.model_api')) ``` Then you just need to decorate your model with `@model_api.register` ```python from camomilla import model_api @model_api.register() class MyModel(models.Model): title = models.CharField(max_length=200) description = models.TextField(null=True, blank=True) ``` This will create an api endpoint with url `/api/models/my-model` with full camomilla api capabilities. You can also personalize the view or the serializer passing some parameter to the register function: * `base_serializer`: The base serializer to use for the model. * `base_viewset`: The base viewset to use for the model. * `serializer_meta`: The meta class to use for the serializer. * `viewset_attrs`: The attributes to add to the viewset. * `filters`: The filters to apply to the queryset. ## πŸ—‚οΈ List endpoint **URL Structure:** * `api/camomilla/` **Simple Response:** ```json [ { ... single model data ... }, {}, {} ] ``` ### Use Pagination List api comes with a builtin paginator. The paginated response is disabled by defualt to be compliant with default rest framework lists. If you want a paginated response you need to specify the page size in the request as a GET parameter. For example, the request `/api/camomilla/?items=10`, will return data splittet 10 elements per page. **Paginated Response:** ```json { "items": [ { ... single model data ... }, {}, {} ], "paginator": { "count": 1, // number of elements "page": 1, // current page number "has_next": false, // has a next page "has_previous": false, // has a previous page "pages": 1, // total number of pages "page_size": 10 // number of elements per page (depends on items parameter) } } ``` ### Use Filtering List api comes with a builtin filter syntax. You can filter data with GET query parameters using the following sintax: `/api/camomilla/?fltr=field_name=value` This syntax can be repeated multiple times. `/api/camomilla/?fltr=field_name=value&fltr=field_name=value` In place of `field_name` you can use any [django filter argument](https://docs.djangoproject.com/en/4.2/topics/db/queries/#retrieving-specific-objects-with-filters). If the value has commas and is between square brackets like `[val1,val2,val3]` it will be treated as an array. For example you can filter some model like this: `/api/camomilla/?fltr=field_name__in=[val1,val2]` ### Use Search You can also full text search your model with query param `search`: `/api/camomilla/?search=q_string` ## πŸ—‚οΈ Detail endpoint Retrieve api just returns model data serialized in a json. The serialization goes through nested objects by default, creating on the fly nested serializers. You can modify this behaviour decreasing the value `depth` in Serializer Meta for a single serializer or change the default option in camomilla settings. ```python CAMOMILLA = { "MEDIA": { "API": {"NESTING_DEPTH": 10 } }, } ``` **URL Structure:** * `api/camomilla//` **Simple Response:** ```json { ... single model data ... } ``` --- --- url: /camomilla-core/How to/Use Astro Integration.md --- # πŸš€ Use Astro Integration Camomilla ships with a first-class frontend integration for [Astro](https://astro.build/): **[@camomillacms/astro-integration](https://github.com/camomillacms/astro-camomilla-integration)**. It turns Camomilla into a fully headless CMS backend for an Astro site with zero boilerplate β€” auto-routing, SSR, SEO meta, template registration, caching, and ready-made components all handled by the integration. > \[!IMPORTANT] > **Version compatibility** β€” Camomilla **6.5** requires **`@camomillacms/astro-integration` β‰₯ 0.7**. The 6.5 release moves page-visibility gating server-side and adds the authenticated preview router and the public menus resolver; integration 0.7 is the first version that speaks this API. On camomilla 6.5, an older (0.6.x) integration would render non-public pages publicly. Conversely, integration 0.7 targets 6.5+ β€” see [Use Page Lifecycle](../Use%20Page%20Lifecycle/) for the details. ## Install ```bash npm add @camomillacms/astro-integration ``` Register the integration in your `astro.config.mjs`: ```javascript import camomilla from "@camomillacms/astro-integration"; import node from "@astrojs/node"; export default { integrations: [ camomilla({ server: "http://localhost:8000", // your Camomilla server URL autoRouting: true, // auto-create routes from the Camomilla API templatesIndex: "./src/templates/index.js", stylesIndex: "/src/styles/main.scss", forwardedHeaders: ["X-Forwarded-Host", "X-Forwarded-Proto"], enableTransitions: false, }), ], output: "server", adapter: node({ mode: "standalone" }), }; ``` > \[!WARNING] > The integration runs in **SSR mode only** β€” set `output: "server"` and use the `@astrojs/node` adapter. ## Key Features * **Auto Routing** β€” routes are created on the fly from the Camomilla page API. * **SEO** β€” ``, Open Graph, Twitter Card, schema.org JSON-LD are populated from the page response. * **Templates** β€” map Camomilla `template` identifiers to `.astro` files via a single index module. * **Error templates** β€” register a generic `error` template plus per-status templates (`404`, `500`, …). * **Draft pages** β€” non-public pages return `404` by default; append `?preview=true` to preview. * **Forwarded headers** β€” configurable request-header forwarding so Camomilla knows the real host/proto. * **Cache** β€” optional response cache with `memory`, `redis`, `valkey`, or `memcache` backends and `varyOnHeaders` support. * **Transitions** β€” works with Astro's view-transitions engine. * **Components** β€” ready-made Astro components that consume Camomilla API shapes (see below). ## Components ### `<CamomillaPicture>` Render a responsive `<picture>` from a Camomilla `Media` object. Uses the `renditions` / `srcset` fields produced by Camomilla's [responsive rendition system](../Use%20Media/#-responsive-renditions-srcset) (AVIF + WebP + original at `sm`/`md`/`lg` widths by default) and degrades gracefully to a plain `<img>` when no renditions exist. ```astro --- import CamomillaPicture from '@camomillacms/astro-integration/components/CamomillaPicture.astro' import type { CamomillaMedia } from '@camomillacms/astro-integration/types/camomillaMedia' const media = Astro.locals.camomilla?.page?.template_data?.hero as CamomillaMedia --- <CamomillaPicture media={media} sizes="(min-width: 1024px) 1600px, 100vw" loading="eager" fetchpriority="high" class="hero-img" /> ``` **Output:** ```html <picture> <source type="image/avif" srcset="…sm-avif.avif 400w, …md-avif.avif 800w, …lg-avif.avif 1600w" sizes="…"> <source type="image/webp" srcset="…sm-webp.webp 400w, …md-webp.webp 800w, …lg-webp.webp 1600w" sizes="…"> <img src="…lg-original.jpg" srcset="…" sizes="…" alt="…" loading="lazy" decoding="async" width="1980" height="1319"> </picture> ``` The browser picks the first `<source>` it understands; the inner `<img>` is the universal fallback. `width` / `height` are pre-filled from `media.image_props` to prevent layout shift. **Props:** | Prop | Default | Description | |---|---|---| | `media` | β€” | Required. The `Media` object from Camomilla's REST API. | | `sizes` | β€” | Standard HTML `sizes` attribute, applied to every `<source>` and the `<img>`. | | `alt` | `media.alt_text` | Image alt text. Falls back to the Media's alt\_text. | | `loading` | `'lazy'` | Use `'eager'` for above-the-fold images. | | `decoding` | `'async'` | Native decoding hint. | | `fetchpriority` | β€” | `'high'` / `'low'` / `'auto'`. | | `formats` | `['avif', 'webp']` | `<source>` preference order. | | `fallbackFormat` | `'original'` | Which rendition set feeds the fallback `<img>`. | | `class` | β€” | Class applied to the `<img>`. Use this for Tailwind/CSS. | | `pictureClass` | β€” | Class applied to the `<picture>`. | All other props are forwarded to the `<img>` as HTML attributes. ### `<SeoHead>` and `<MainLayout>` The integration also exposes a `SeoHead` component (auto-wired inside `MainLayout`) that populates the document head from Camomilla's page SEO fields, and a `MainLayout` that injects global styles and optional view-transitions. Both are consumed automatically by the template router β€” you rarely need to import them directly. ## Templates Register your Astro templates in a single index module (`./src/templates/index.js`): ```javascript import MyTemplate from './mytemplate.astro' import ErrorTemplate from './error.astro' import NotFoundTemplate from './404.astro' export default { 'my-template': MyTemplate, error: ErrorTemplate, '404': NotFoundTemplate, } ``` The Camomilla-side `template` identifier on each page selects the component. Error statuses (`404`, `500`, …) match first, falling back to the generic `error` template. ## Accessing page data Camomilla data is injected into `Astro.locals.camomilla` by the integration middleware: ```astro --- const page = Astro.locals.camomilla?.page // the current CamomillaPage const user = Astro.locals.camomilla?.user // current user (if authenticated) const status = Astro.locals.camomilla?.response?.status const error = Astro.locals.camomilla?.error --- ``` ## Cache Enable caching of the entire Astro response to keep pages fast under load: ```javascript camomilla({ cache: { backend: 'redis', // 'memory' | 'redis' | 'valkey' | 'memcache' location: 'redis://user:pass@localhost:6379', ttl: 60 * 60 * 1000, // ms, or "1h" / "30m" / "45s" keyPrefix: 'astro-camomilla-integration', varyOnHeaders: ['Cookie', 'User-Agent'], // cache separately per header value }, }) ``` `varyOnHeaders` is the recommended knob for splitting the cache between authenticated and anonymous users (or per-locale via `Accept-Language`). ## More Full documentation, source code, and issue tracker: **[github.com/camomillacms/astro-camomilla-integration](https://github.com/camomillacms/astro-camomilla-integration)**. --- --- url: /camomilla-core/How to/Use Settings.md --- # βš™οΈ Use Settings Camomilla comes with a set of settings that you can use to customize the behaviour of the app. Here is a list of all the settings you can use, with their default values: ```python # <project_name>/settings.py CAMOMILLA = { "PROJECT_TITLE": "" # the title of your project (a rarely used setting :P), "ROUTER": { "BASE_URL": "" # change this if you want to serve camomilla from a subpath }, "MEDIA": { "OPTIMIZE": { "MAX_WIDTH": 1980, # max width for images optimization "MAX_HEIGHT": 1400, # max height for images optimization "DPI": 30, # dpi for images optimization "ENABLE": True # enable or disable images optimization }, "THUMBNAIL": { "FOLDER": "", # folder where thumbnails will be saved "WIDTH": 50, # default width for thumbnails "HEIGHT": 50 # default height for thumbnails } }, "RENDER": { "TEMPLATE_CONTEXT_FILES": [], # add here the path to your custom context files "AUTO_CREATE_HOMEPAGE": True, # if True, a homepage will be created automatically "ARTICLE": { "DEFAULT_TEMPLATE": "", # default template for articles "INJECT_CONTEXT": None # function to inject context in articles templates }, "PAGE": { "DEFAULT_TEMPLATE": "", # default template for pages "INJECT_CONTEXT": None # function to inject context in pages templates } }, "STRUCTURED_FIELD": { "CACHE_ENABLED": True # if True, the structured field will use a cache system to avoid multiple queries to the database } "API": { "NESTING_DEPTH": 10 # default nesting depth for serializers }, "DEBUG": False # enable or disable debug mode } ``` You can find more information about each setting in the relative section of intrest. Browse [How to](../How%20to/README.md) guides to find what you are looking for! --- --- url: /camomilla-core/Upgrading.md --- # ⬆️ Upgrading from status-based publication Older camomilla releases (**≀ 6.4**) stored a page's publication state in two columns: * `status` β€” a translatable `CharField` (`PUB` / `DRF` / `PLA` / `TRS`) * `publication_date` β€” a global `DateTimeField` The new lifecycle **derives** that state from timestamps instead: * `published_at` β€” translatable; when *this language* went / goes live * `deleted_at` β€” global soft-delete marker * a separate [`Draft`](../How%20to/Use%20Page%20Lifecycle/) table (no old equivalent β€” drafts simply start empty) This page is **only** relevant if you're upgrading an existing project that already has data in the old `status` / `publication_date` columns. New installs need nothing here. ::: danger Back up your database first This migration drops the old columns. Take a full backup (or snapshot) before you start. The data step is **forward-only** β€” to roll back you restore the backup. ::: ## What the data step does For every concrete page model (`Page`, `Article`, and any custom `AbstractPage` subclass), per language: | Old `status` | New `published_at` | |---|---| | `PUB` Published | `publication_date` if it's in the past, otherwise *now* (stays live) | | `PLA` Planned | `publication_date` verbatim β€” a future date stays `PLA`, a past date becomes `PUB`, an empty one becomes `DRF` | | `DRF` Draft | `NULL` (draft) | | `TRS` Trashed | `NULL` (hidden) | `deleted_at` is **global** now, so it's set only when **every** language of a page is `TRS`. A page trashed in one language but live in another keeps its live languages; the trashed language just becomes "not published". The mapping preserves the old `is_public` result exactly for every combination (there's a test pinning this). ## Procedure ### 1. Upgrade the package ```bash pip install -U django-camomilla-cms ``` Add `django-reversion` to `INSTALLED_APPS` (new hard dependency that powers page revisions): ```python INSTALLED_APPS = [ # … "reversion", ] ``` ### 2. Generate the migration β€” with the data step already inserted Use camomilla's `camomilla_makemigrations` command instead of `makemigrations`: ```bash python manage.py camomilla_makemigrations ``` It's a drop-in wrapper around `makemigrations` (same flags β€” `--dry-run`, `--name`, …) that runs camomilla's migration injectors over the generated migrations and **auto-inserts the matching data step** in the correct position whenever it recognises a breaking change β€” here, the status β†’ lifecycle transition. (It's a general mechanism: future camomilla upgrades register their own injectors, so the same command keeps handling them.) You get a ready-to-apply migration β€” no hand-editing. It prints a line when it injects: ``` + auto-inserted MigrateStatusToLifecycle(page) into the camomilla migration + auto-inserted MigrateStatusToLifecycle(article) into the camomilla migration ``` (one per page model β€” your own apps' custom page models get their own, in their own migrations) ::: tip Don't pass an app name Run it **without** an app argument. The transition affects `camomilla.Page` / `camomilla.Article` **and** any custom `AbstractPage` subclass in your own apps β€” whose migrations are generated in *your* app, not in `camomilla`. A no-arg run injects the data step into every affected app's migration in one pass; `… camomilla` would skip your custom page models. Add `--dry-run` to preview without writing. ::: ::: warning Already ran plain `makemigrations`? If you ran the stock `python manage.py makemigrations` **before** this step, it wrote a migration that drops `status` with **no backfill** in between β€” applying it would lose your publication state. Delete that just-generated migration and regenerate it with `camomilla_makemigrations` (the injector only rewrites migrations as they're generated, not ones already on disk). The data step *is* re-inserted automatically if the lifecycle columns were added in one migration and the legacy ones are dropped in a later one β€” but a single migration that does both without the backfill is unsafe to apply. ::: ::: details Prefer to do it by hand? Run the normal `python manage.py makemigrations`, then open each generated migration and add **one operation per page model**, naming the model. Place each `MigrateStatusToLifecycle("<model>")` **after** that model's `AddField` ops (`published_at*` / `deleted_at`) and **before** its `RemoveField` ops (`status*` / `publication_date`). ```python from camomilla.upgrades.migrations import MigrateStatusToLifecycle operations = [ migrations.AddField("page", "published_at", ...), # + per-language, deleted_at migrations.AddField("article", "published_at", ...), MigrateStatusToLifecycle("page"), # one op per model MigrateStatusToLifecycle("article"), migrations.RemoveField("page", "status"), # + per-language, publication_date migrations.RemoveField("article", "status"), ] ``` Each op migrates only its own model, so the same operation appears safely in several apps' migrations (yours, for custom page models, plus camomilla's) without overlapping. ::: ### 3. Apply it ```bash python manage.py migrate ``` ### 4. Verify ```python from camomilla.models import Page Page.objects.public().count() # pages that were PUB (or PLA whose date has passed) Page.objects.trashed().count() # pages that were TRS in every language Page.objects.draft().count() # (drafts start empty β€” this counts pending Draft rows) ``` `Page.objects.filter(status="PUB")` still works too β€” the manager rewrites derived-status lookups into timestamp conditions, so most existing query code keeps running unchanged. See [Use Page Lifecycle](../How%20to/Use%20Page%20Lifecycle/). ## Notes * **Drafts start empty.** The old system had no draft storage, so there's nothing to backfill into the `Draft` table. The draft / preview / scheduling workflow is available immediately for new edits. * **One-way.** The data step's reverse is a no-op (`migrations.RunPython.noop`) β€” rolling the migration back restores the columns but not their values. Restore from your backup if you need to revert. * **Custom page models** are handled automatically β€” the transform runs against every model that carries both the old `status` and new `published_at` columns at migration time. --- --- url: /camomilla-core/presentations.md --- # Presentations Slide decks about camomilla releases and features β€” useful for briefing a dev team before an upgrade. Each deck is a single self-contained HTML page: navigate with ←/β†’, jump with Home/End, or print it to PDF (one slide per page). | Deck | Covers | |---|---| | Release update 6.4.0 β†’ 6.5.0 | Media renditions, Meta Models, typed `Permalink` links, the page lifecycle (drafts / preview / scheduling / revisions), and the `camomilla_makemigrations` upgrade path | ::: info For contributors Deck sources live in [`docs/public/presentations/`](https://github.com/camomillacms/camomilla-core/tree/master/docs/public/presentations) β€” one self-contained HTML file per deck (inline CSS/JS, no external assets), named `YYYY-MM-<topic>.html` so they sort chronologically. Keep decks source-verified against the tagged release they present, then add a row to the table above. ::: --- --- url: /camomilla-core/Contribute.md --- # How to contribute 🀝 Any contribution is welcome! Whether you want to report a bug, suggest an enhancement, or write code, we are happy to help you. Please read the following guidelines before contributing. ### βœ‰οΈ Reporting bugs You can report bugs by creating an issue on the [issue tracker](https://github.com/camomillacms/camomilla-core/issues). Please include as much information as possible, including: * The version of Camomilla you are using * The version of Django you are using * The version of Python you are using * The operating system you are using * The steps to reproduce the bug * The expected result * The actual result * Any other information that might be useful ### ☝️ Suggesting enhancements You can suggest enhancements by creating an issue on the [issue tracker](https://github.com/camomillacms/camomilla-core/issues). Enhancements can be anything from a new feature to a small improvement in the documentation. Even if you are not sure about your idea, feel free to open an issue and discuss it with us. Every idea is welcome! ### πŸ§‘β€πŸ’» Your first code contribution If you want to contribute to Camomilla by writing code, you can start by looking at the [issue tracker](https://github.com/camomillacms/camomilla-core/issues). There you can find issues that are marked as "good first issue" and are suitable for new contributors. If you want to work on an issue, please leave a comment on it so that we can assign it to you. If you want to work on something else, please open an issue first so that we can discuss it. This way we can avoid duplicated work and make sure that your contribution will be accepted. Once you have finished your work, you can open a pull request. We will review it and, if everything is fine, we will merge it. If you are not sure about something, feel free to open a pull request as soon as possible so that we can discuss it. We are always happy to help! ### πŸ’… Coding conventions We try to follow the [Django coding style](https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/coding-style/). Please make sure to follow it when writing code for Camomilla. If you are not sure about something, feel free to ask us. We also use `black` to format our code, so please make sure to run it before opening a pull request. You can run it by executing the following command: ```bash $ make format ``` ### πŸ‰‘ Commit Conventions We use [semantic commit messages](https://www.conventionalcommits.org/en/v1.0.0/) to make it easier to understand the changes made in each commit. Please use the following format for your commit messages: ``` <type>(<scope>): <subject> <body> <footer> ``` Where: * `<type>` is one of the following: `feat`, `fix`, `docs`, `style`, `refactor`, `perf`, `test`, `chore` * `<scope>` is optional and can be used to specify the scope of the change (e.g. `camomilla`, `theme`, `admin`, etc.) * `<subject>` is a short description of the change (max 72 characters) * `<body>` is an optional longer description of the change * `<footer>` is an optional footer that can be used to reference issues or pull requests (e.g. `Closes #123`, `Fixes #456`) ### πŸ§ͺ Running tests We always test pull requests before merging them. To avoid issues, please make sure that your code passes the tests before opening a pull request. You can run the tests by executing the following command: ```bash $ make test ``` We test against a variety of Django and Python versions, so please make sure that your code passes the tests for all of them. You can check the list of tested version in our [CI configuration](.github/workflows/ci.yml). --- --- url: /camomilla-core/Changelog.md --- # CHANGELOG ## v6.5.0 (2026-06-17) ### Bug Fixes * Add related\_name to ForeignKey and ManyToManyField in AbstractArticle ([`c202c41`](https://github.com/camomillacms/camomilla-core/commit/c202c4178a3bf789618813e519fa916fe0843f81)) * Reduce ambiguity of migration process by introducing model-specific data migration operations ([`a71cfac`](https://github.com/camomillacms/camomilla-core/commit/a71cfac50c335d0ed9ac976ce7faf5cf61f32f02)) * **migration**: Update camomilla dependency to use **first** for dynamic migrations ([#49](https://github.com/camomillacms/camomilla-core/pull/49), [`70c3cbe`](https://github.com/camomillacms/camomilla-core/commit/70c3cbe38bfe5fcf47725c3abb7fd0253f50f68f)) * **migration**: Update camomilla dependency to use **first** for dynamic migrations ([#48](https://github.com/camomillacms/camomilla-core/pull/48), [`eadc842`](https://github.com/camomillacms/camomilla-core/commit/eadc842dd216a70316a9c1adcdde4973d4f77d2b)) * **reverse\_url**: Improve reverse url handling in various places ([#49](https://github.com/camomillacms/camomilla-core/pull/49), [`70c3cbe`](https://github.com/camomillacms/camomilla-core/commit/70c3cbe38bfe5fcf47725c3abb7fd0253f50f68f)) * **reverse\_url**: Improve reverse url handling in various places ([#48](https://github.com/camomillacms/camomilla-core/pull/48), [`eadc842`](https://github.com/camomillacms/camomilla-core/commit/eadc842dd216a70316a9c1adcdde4973d4f77d2b)) ### Chores * Update example app theme πŸ’… ([`7584c1f`](https://github.com/camomillacms/camomilla-core/commit/7584c1f89baafb103988168100e6c43b7885b2a4)) ### Documentation * Update docs with detailed explanations for menu node links, page lifecycle, and structured JSON field usage ([#49](https://github.com/camomillacms/camomilla-core/pull/49), [`70c3cbe`](https://github.com/camomillacms/camomilla-core/commit/70c3cbe38bfe5fcf47725c3abb7fd0253f50f68f)) * Update docs with detailed explanations for menu node links, page lifecycle, and structured JSON field usage ([#48](https://github.com/camomillacms/camomilla-core/pull/48), [`eadc842`](https://github.com/camomillacms/camomilla-core/commit/eadc842dd216a70316a9c1adcdde4973d4f77d2b)) * Update index and pages documentation to include lifecycle information ([`2070887`](https://github.com/camomillacms/camomilla-core/commit/2070887c74009fa39a68879513f22a4acc7db0ac)) * **refactor**: Move from vuepress to vitepress with llm.txt configuration and native skills for contributing and using Camomilla. ([#49](https://github.com/camomillacms/camomilla-core/pull/49), [`70c3cbe`](https://github.com/camomillacms/camomilla-core/commit/70c3cbe38bfe5fcf47725c3abb7fd0253f50f68f)) * **refactor**: Move from vuepress to vitepress with llm.txt configuration and native skills for contributing and using Camomilla. ([#48](https://github.com/camomillacms/camomilla-core/pull/48), [`eadc842`](https://github.com/camomillacms/camomilla-core/commit/eadc842dd216a70316a9c1adcdde4973d4f77d2b)) ### Features * Add management command to regenerate media renditions and corresponding tests ([`7bc8394`](https://github.com/camomillacms/camomilla-core/commit/7bc83943f45aef11da159efd9e4bdcd7edf3660d)) * Add method to get structured search display for media ([`eacef26`](https://github.com/camomillacms/camomilla-core/commit/eacef26d7c6188c54b79464ea1e968f12083e174)) * Add pages\_router\_preview for authenticated editor previews ([#49](https://github.com/camomillacms/camomilla-core/pull/49), [`70c3cbe`](https://github.com/camomillacms/camomilla-core/commit/70c3cbe38bfe5fcf47725c3abb7fd0253f50f68f)) * Add pages\_router\_preview for authenticated editor previews ([#48](https://github.com/camomillacms/camomilla-core/pull/48), [`eadc842`](https://github.com/camomillacms/camomilla-core/commit/eadc842dd216a70316a9c1adcdde4973d4f77d2b)) * Added query rewrite to make .filter(status=xxx) work like before. ([#49](https://github.com/camomillacms/camomilla-core/pull/49), [`70c3cbe`](https://github.com/camomillacms/camomilla-core/commit/70c3cbe38bfe5fcf47725c3abb7fd0253f50f68f)) * Added query rewrite to make .filter(status=xxx) work like before. ([#48](https://github.com/camomillacms/camomilla-core/pull/48), [`eadc842`](https://github.com/camomillacms/camomilla-core/commit/eadc842dd216a70316a9c1adcdde4973d4f77d2b)) * Implement camomilla\_makemigrations command with auto-injection for data migrations ([`eee5d3c`](https://github.com/camomillacms/camomilla-core/commit/eee5d3c09ee1b1bfee0f6b7b0942df767acee769)) * Implement data migration for status-based publication to timestamp-derived lifecycle ([#49](https://github.com/camomillacms/camomilla-core/pull/49), [`70c3cbe`](https://github.com/camomillacms/camomilla-core/commit/70c3cbe38bfe5fcf47725c3abb7fd0253f50f68f)) * Page lifecycle (drafts, preview, scheduling, revisions) + typed links, docs & agent setup ([#48](https://github.com/camomillacms/camomilla-core/pull/48), [`eadc842`](https://github.com/camomillacms/camomilla-core/commit/eadc842dd216a70316a9c1adcdde4973d4f77d2b)) * Page lifecycle with per-language drafts, scheduling, and revisions ([#49](https://github.com/camomillacms/camomilla-core/pull/49), [`70c3cbe`](https://github.com/camomillacms/camomilla-core/commit/70c3cbe38bfe5fcf47725c3abb7fd0253f50f68f)) * Page lifecycle with per-language drafts, scheduling, and revisions ([#48](https://github.com/camomillacms/camomilla-core/pull/48), [`eadc842`](https://github.com/camomillacms/camomilla-core/commit/eadc842dd216a70316a9c1adcdde4973d4f77d2b)) ### Refactoring * Enhance migration operations and documentation for lifecycle column updates ([`6ab82ac`](https://github.com/camomillacms/camomilla-core/commit/6ab82acd21d86b634b517439f9d9a772bd7383ad)) * Extract Draft model and derive page lifecycle from timestamps ([#49](https://github.com/camomillacms/camomilla-core/pull/49), [`70c3cbe`](https://github.com/camomillacms/camomilla-core/commit/70c3cbe38bfe5fcf47725c3abb7fd0253f50f68f)) * Extract Draft model and derive page lifecycle from timestamps ([#48](https://github.com/camomillacms/camomilla-core/pull/48), [`eadc842`](https://github.com/camomillacms/camomilla-core/commit/eadc842dd216a70316a9c1adcdde4973d4f77d2b)) * Remove unnecessary whitespace in image\_thumb\_preview method ([`b4623a3`](https://github.com/camomillacms/camomilla-core/commit/b4623a37ece38bfa3877b1e113ffd628e8f8d886)) * Reorganize migration operations and update import paths for MigrateStatusToLifecycle ([`34c7ec8`](https://github.com/camomillacms/camomilla-core/commit/34c7ec8917aba9db51e3c9dcfe2c4f43b6ceeabe)) ## v6.4.0 (2026-04-22) ### Bug Fixes * Update source for django-structured-metaobjects to use PyPI registry ([#46](https://github.com/camomillacms/camomilla-core/pull/46), [`1128960`](https://github.com/camomillacms/camomilla-core/commit/1128960bc22dac687b2fe28b35f259e84d21e4e3)) ### Features * Add media sourceset renditions improving the performances of media rendering ([#47](https://github.com/camomillacms/camomilla-core/pull/47), [`e58fb50`](https://github.com/camomillacms/camomilla-core/commit/e58fb50360ebfd8064792a9a2c726ba77b325cf1)) * Implement meta models for dynamic content types with validation and API support ([#46](https://github.com/camomillacms/camomilla-core/pull/46), [`1128960`](https://github.com/camomillacms/camomilla-core/commit/1128960bc22dac687b2fe28b35f259e84d21e4e3)) * Implement meta models for dynamic content types with validation… ([#46](https://github.com/camomillacms/camomilla-core/pull/46), [`1128960`](https://github.com/camomillacms/camomilla-core/commit/1128960bc22dac687b2fe28b35f259e84d21e4e3)) ### Refactoring * Install metaobject from ext deps ([#46](https://github.com/camomillacms/camomilla-core/pull/46), [`1128960`](https://github.com/camomillacms/camomilla-core/commit/1128960bc22dac687b2fe28b35f259e84d21e4e3)) * **menu**: Update MenuNodeLink model to enhance validation and derive fields dynamically ([#46](https://github.com/camomillacms/camomilla-core/pull/46), [`1128960`](https://github.com/camomillacms/camomilla-core/commit/1128960bc22dac687b2fe28b35f259e84d21e4e3)) ### Testing * Add tests for MenuNodeLink relational and static URL handling ([#46](https://github.com/camomillacms/camomilla-core/pull/46), [`1128960`](https://github.com/camomillacms/camomilla-core/commit/1128960bc22dac687b2fe28b35f259e84d21e4e3)) ## v6.3.1 (2026-03-24) ### Bug Fixes * **docs**: Update Django versions badge in README ([`36cc0b5`](https://github.com/camomillacms/camomilla-core/commit/36cc0b5e2f474cb491eb299998c722055580d30b)) * **serializers**: Correct superclass reference in UserProfileSerializer update method ([`d919123`](https://github.com/camomillacms/camomilla-core/commit/d9191235e6a9730521179be88660e34cebe63299)) * **views**: Add permission classes to LanguageViewSet for better access control ([`f4ddd06`](https://github.com/camomillacms/camomilla-core/commit/f4ddd06f443e6139edf5c98131722145485f0141)) ### Chores * Add AI coding instructions for Camomilla CMS ([`df7cbcd`](https://github.com/camomillacms/camomilla-core/commit/df7cbcd051a18243f1e527d7b9efb6430383bfe4)) * Add structured JSON field integration and admin customization in Agent instructions ([`59b722a`](https://github.com/camomillacms/camomilla-core/commit/59b722ac5ec71015a6bef6e14c8aeee21c1ca6df)) ### Refactoring * Remove ParseMimeMixin from MediaFolderViewSet and MediaViewSet ([`08e9ca4`](https://github.com/camomillacms/camomilla-core/commit/08e9ca412766d9ada76efaf89593995fd084de1a)) * Remove unnecessary whitespace in LanguageViewSet ([`667e453`](https://github.com/camomillacms/camomilla-core/commit/667e453aafe8e236a6101b3f7890c11b5fb8ebcb)) * **tests**: Remove debug print statement from media data test ([`9fd8020`](https://github.com/camomillacms/camomilla-core/commit/9fd80201650523dc5e4f46b285d722bdd4429614)) ### Testing * Improve test coverage ([`1c6bac9`](https://github.com/camomillacms/camomilla-core/commit/1c6bac95b22a5e3963440d6f1ba50b2055da89bc)) ## v6.3.0 (2026-01-07) ### Bug Fixes * **api**: Update permission classes to allow unauthenticated access for logout api ([`095a868`](https://github.com/camomillacms/camomilla-core/commit/095a868f0c075e05ed802c1b4fdab98de4f2a53a)) ### Chores * Add checkout step to coverage job in CI workflow ([`ddc42ab`](https://github.com/camomillacms/camomilla-core/commit/ddc42ab4c038fffb0fb792aeaf2ae695e0970b08)) * Added docs build pipeline ([`8cba907`](https://github.com/camomillacms/camomilla-core/commit/8cba907e503e1c2bc738c8eae37589afdaeddb5f)) * Refactor doc publish script to streamline git operations ([`0c6e2c7`](https://github.com/camomillacms/camomilla-core/commit/0c6e2c7aae01facc2751e55cad1d4232654c5167)) * Simplify commit message for documentation deployment ([`1858bad`](https://github.com/camomillacms/camomilla-core/commit/1858bad7c48bdd16ad299335b2c07a8c527f2caa)) * Some beauty lifting πŸ’… to gh actions steps ([`4a49d47`](https://github.com/camomillacms/camomilla-core/commit/4a49d4735b2776a06a0d5d64e8dd7a5ef26bc98e)) * Update CI configuration for Python 3.14 and Django compatibility; add pydantic and psycopg2-binary dependencies ([#41](https://github.com/camomillacms/camomilla-core/pull/41), [`8230c4e`](https://github.com/camomillacms/camomilla-core/commit/8230c4e87a19b94601b18377e692eed482a6f05e)) * Update coverage job name for clarity ([`49022bd`](https://github.com/camomillacms/camomilla-core/commit/49022bda05938f4701597b3168d56a7c70d0ca88)) * Update doc pipeline ([`bf1ff8f`](https://github.com/camomillacms/camomilla-core/commit/bf1ff8fc0910b6beea6f70a4212da4201d632724)) * Update doc pipeline pnpm version ([`9cc42e3`](https://github.com/camomillacms/camomilla-core/commit/9cc42e3a132589e509961da54416f27dbe509eb5)) * Update doc pipeline publish script ([`a2bd422`](https://github.com/camomillacms/camomilla-core/commit/a2bd422e57267c43505a84d6584d9d0f65e4f445)) * Update documentation publishing using dedicated github page action ([`6af7284`](https://github.com/camomillacms/camomilla-core/commit/6af7284d853e58c319c5ceed94522a85541d171d)) * Update Makefile with new commands and .PHONY ([`d09c805`](https://github.com/camomillacms/camomilla-core/commit/d09c805e6b887a1247b30e115d0401cf76f92ba1)) * Update publish branch to gh-pages for documentation deployment ([`29c72a5`](https://github.com/camomillacms/camomilla-core/commit/29c72a54abf7cae14431199633af1383fcc3549b)) * Update Python version support to include 3.14 and adjust requirements ([#41](https://github.com/camomillacms/camomilla-core/pull/41), [`8230c4e`](https://github.com/camomillacms/camomilla-core/commit/8230c4e87a19b94601b18377e692eed482a6f05e)) ### Documentation * Add comments to placeholder files in docs to instruct contributor where to find original files ([`f1b0e18`](https://github.com/camomillacms/camomilla-core/commit/f1b0e18b275b0e01fa6d7603c913b213a2f5397a)) * Fix moveCHANGELOG script wrong contribute destination ([`28ee254`](https://github.com/camomillacms/camomilla-core/commit/28ee2547803ed29fb2aab6dcb356d7485a889ee3)) * Remove emoji from warning banners ([`f766cc5`](https://github.com/camomillacms/camomilla-core/commit/f766cc570d01325ea9078b35574a71a6a023af23)) * Update docs engine to vuepress 2-rc24 ([`dde459a`](https://github.com/camomillacms/camomilla-core/commit/dde459a5c6048b2308c2f28cd07b13bb7e395dd4)) ### Features * **python**: Add compatibility with python 3.14 ([#41](https://github.com/camomillacms/camomilla-core/pull/41), [`8230c4e`](https://github.com/camomillacms/camomilla-core/commit/8230c4e87a19b94601b18377e692eed482a6f05e)) ### Refactoring * Black . πŸ’… ([`04a97b7`](https://github.com/camomillacms/camomilla-core/commit/04a97b78aa5e5288cacd4e658ff042645881e94b)) ### Testing * **serializers**: Add test standard api serializer ([#45](https://github.com/camomillacms/camomilla-core/pull/45), [`0ea3ea4`](https://github.com/camomillacms/camomilla-core/commit/0ea3ea408ad82101423b21fde0680f0e420f0b7e)) ## v6.2.3 (2025-10-14) ### Bug Fixes * Change identifier field type from TextField to CharField with max\_length ([`a130c4b`](https://github.com/camomillacms/camomilla-core/commit/a130c4b324df47bc00c33e1074355d9545244917)) * **mysql**: Implement monkey patch for MySQL DATETIME handling ([`eec96bd`](https://github.com/camomillacms/camomilla-core/commit/eec96bdcbe14052dbaa471078cd0c94021f5b347)) ### Chores * Add step to update docs changelog after release ([`785752d`](https://github.com/camomillacms/camomilla-core/commit/785752d64f7fb55e3422045463d762b97974cb1e)) * Fix quote mysqlclient version constraint in CI configuration ([`097b7bd`](https://github.com/camomillacms/camomilla-core/commit/097b7bdbd171a787e6b45c1793575f868b24615f)) * Fix release pipeline python version ([`8942826`](https://github.com/camomillacms/camomilla-core/commit/89428266ab8e38c7d3f18016cee48031d53c7019)) * Remove psycopg2-binary version constraints from dev dependencies ([`2d90028`](https://github.com/camomillacms/camomilla-core/commit/2d900285ed27214398c7a9aa60ea6a4749577ec5)) * Remove psycopg2-binary version constraints from dev dependencies ([`35039be`](https://github.com/camomillacms/camomilla-core/commit/35039be1672965d60670bdcb864cb00bf3c6fe3f)) ### Continuous Integration * Unify test command across SQLite, Postgres, and MySQL jobs ([`0e6e896`](https://github.com/camomillacms/camomilla-core/commit/0e6e896e8a2fa2101427a652e620dea0a9638fc9)) ### Refactoring * Ensure newline at end of file in **init**.py ([`e06f55d`](https://github.com/camomillacms/camomilla-core/commit/e06f55d61a03e08698a055c56487b7fe99fede0e)) * Remove unused import of settings in pagination mixin ([`2dc9bd6`](https://github.com/camomillacms/camomilla-core/commit/2dc9bd6ceb361b26cbf72ba4aac5cf526b0b9e74)) * Simplify JSONField imports and remove unused arrayfield ([`f8bd453`](https://github.com/camomillacms/camomilla-core/commit/f8bd4533904a77c71b5c55400d236fe362ed501c)) ## v6.2.2 (2025-10-13) ### Bug Fixes * **tags**: Fix to\_pretty\_dict template tag not rendering UUID on first try ([`9809e52`](https://github.com/camomillacms/camomilla-core/commit/9809e5204b07ab50e47ce657454efd2b2f038c1b)) ### Chores * Drop support for python 3.9 and django 3.2 ([`dcd1c96`](https://github.com/camomillacms/camomilla-core/commit/dcd1c967d9e373b37fda7ce79918d8836cd48223)) * Fix CI ([`6906b0b`](https://github.com/camomillacms/camomilla-core/commit/6906b0ba65da09f46cb6c6d1e9210fe2357348e4)) * Fix ci django uv add ([`888be41`](https://github.com/camomillacms/camomilla-core/commit/888be41f44d1c2ad7b744f46e9f87a44dc7ca10d)) * Fix coverage upload ([`ef05aff`](https://github.com/camomillacms/camomilla-core/commit/ef05affa1a160777400e987ad1e3baa9a308f028)) * Fix coverage upload and django selection ([`1ff96db`](https://github.com/camomillacms/camomilla-core/commit/1ff96db6740ebffae28c4c7cca01378b27dee5e6)) * Fix coverage upload and django selection ([`e1a61a2`](https://github.com/camomillacms/camomilla-core/commit/e1a61a2e068ceafa3038b8d92d87f16da8eab169)) * Fix python version window ([`0ae368c`](https://github.com/camomillacms/camomilla-core/commit/0ae368c14e956790203ae05acbac856bddc56b04)) * Fix upload of coverage.html report ([`8040b39`](https://github.com/camomillacms/camomilla-core/commit/8040b39d9e5481ec8b85b3eb73085e546c4d0e03)) * Move to uv package manager ([`38050a9`](https://github.com/camomillacms/camomilla-core/commit/38050a92bd4c882604eec787272ca4355e21e540)) * Remove django version from uv cache keys in CI pipeline ([`c6f4181`](https://github.com/camomillacms/camomilla-core/commit/c6f4181e90aa5e9645a86a770bdf705ac6595f3e)) * Update CI to merge coverages and upload all in one ([`b6c72b4`](https://github.com/camomillacms/camomilla-core/commit/b6c72b4bb5ef960e5bf56f992ee1c40a762888d2)) ### Refactoring * Sobstitute print with logger ([`722b217`](https://github.com/camomillacms/camomilla-core/commit/722b217c46d603506db93a420ab616d586752e29)) ## v6.2.1 (2025-10-12) ### Bug Fixes * **keywords**: From json field to simple charfield ([`08d42dc`](https://github.com/camomillacms/camomilla-core/commit/08d42dcbd2a2fa28dc892225d9f5846e19fa6860)) * **structured**: Update to dsf 1.1.2 to fix missin qs bug in structured fields ([`2ad80fc`](https://github.com/camomillacms/camomilla-core/commit/2ad80fcc524da74a4e56f5968846de764cbece36)) * **UserSerializer**: Add missing fields from Django User Model ([`3ae21ba`](https://github.com/camomillacms/camomilla-core/commit/3ae21ba8750c2532a49c3981f5bc82c88ec43176)) ### Chores * Update semantic release to generate changelog ([`28d85f0`](https://github.com/camomillacms/camomilla-core/commit/28d85f0da9f40dd4972f23e97845762a1ff3951a)) ### Documentation * Update changelog ([`11cba4a`](https://github.com/camomillacms/camomilla-core/commit/11cba4a69451f01038e3f6b25332bb87d8bb8857)) ## v6.2.0 (2025-08-27) ### Fix * Fix default template cosmetics ([`5feff32`](https://github.com/camomillacms/camomilla-core/commit/5feff32)) * Fix page breadcrumb using now routerlink ([`7682706`](https://github.com/camomillacms/camomilla-core/commit/7682706)) * Fix UrlNode manager related names calculation ([`34a469c`](https://github.com/camomillacms/camomilla-core/commit/34a469c)) * Get correct language page if asking page router with prefixed lang ([`82c85e2`](https://github.com/camomillacms/camomilla-core/commit/82c85e2)) * Make template\_name not required in django admin ([`367e951`](https://github.com/camomillacms/camomilla-core/commit/367e951)) * Remove current language from alternates ([`c1b77ac`](https://github.com/camomillacms/camomilla-core/commit/c1b77ac)) ### Chores * Added django\_debug\_toolbar for development purposes ([`3c48bfd`](https://github.com/camomillacms/camomilla-core/commit/3c48bfd)) ### Features * Added cache to router endpoint ([`f14b9e3`](https://github.com/camomillacms/camomilla-core/commit/f14b9e3)) ### Refactoring * Point to camomilla settings instead of modeltranslaor ones ([`f123917`](https://github.com/camomillacms/camomilla-core/commit/f123917)) ## v6.1.4 (2025-07-28) ### Fix * Add StructuredModelSerializer to abstract page serializer ([`151aa9e`](https://github.com/camomillacms/camomilla-core/commit/151aa9e)) * Fix AbstractPageMinimalSerializer name serialization ([`ea533a8`](https://github.com/camomillacms/camomilla-core/commit/ea533a8)) ### Chores * Drop support for python 3.8 ([`2196531`](https://github.com/camomillacms/camomilla-core/commit/2196531)) ## v6.1.3 (2025-07-24) ### Fix * Fix menu nodes serializing entire pages ([`a71976b`](https://github.com/camomillacms/camomilla-core/commit/a71976b)) * Rollback childs property ([`d76f7f4`](https://github.com/camomillacms/camomilla-core/commit/d76f7f4)) ## v6.1.2 (2025-07-23) ### Fix * Add possibility to import action serializers from strings ([`1efc4d0`](https://github.com/camomillacms/camomilla-core/commit/1efc4d0)) * Serializer can be passed as a path to import ([`5bb6652`](https://github.com/camomillacms/camomilla-core/commit/5bb6652)) ### Chores * Update semantic release to v10 ([`2120dcc`](https://github.com/camomillacms/camomilla-core/commit/2120dcc)) ## v6.1.1 (2025-07-18) ### Fix * fix: return empty queryset manager as childs ([`3607de1`](https://github.com/camomillacms/camomilla-core/commit/3607de10f774e9d941a8036df2f56bc12beb52b6)) * fix: return empty child list if parent model is different from child model, and child model is being edited ([`67aa7b0`](https://github.com/camomillacms/camomilla-core/commit/67aa7b0005805eedbee05bd96ca05a9adfc826df)) * fix: menu key editable, default uuid4 ([`8c27d4d`](https://github.com/camomillacms/camomilla-core/commit/8c27d4dfd5003152b1a0d03ad163d0406ef77a31)) ### Unknown * Merge pull request #32 from lotrekagency/master fix: menu key editable, default uuid4 ([`b0e01a2`](https://github.com/camomillacms/camomilla-core/commit/b0e01a2a0f43b171414f05909c84e7904d7319b1)) ## v6.1.0 (2025-07-14) ### Feature * feat: added standard\_serializer option to PageMeta class and to camomilla settings ([`36fb1a8`](https://github.com/camomillacms/camomilla-core/commit/36fb1a8d0c93a584b8461be4354705921d500476)) ### Fix * fix: added model identifier in menu nodes serializer ([`a5e7e45`](https://github.com/camomillacms/camomilla-core/commit/a5e7e45eea07db5c1f35c7da127565e6e7a9e659)) * fix: fix alternate urls generation for missing permalinks ([`29c5bba`](https://github.com/camomillacms/camomilla-core/commit/29c5bba0a0dff46866a6ffca277fc1119297c191)) * fix: fix autopermalink generating double slash with parent page ([`7cd21ce`](https://github.com/camomillacms/camomilla-core/commit/7cd21ce273b54c09cb38f843c629ac59e6519177)) ### Refactor * refactor: renamed router views and router serializers class ([`94e4105`](https://github.com/camomillacms/camomilla-core/commit/94e4105d6af1c5d69b9d8c24e1d4e8300aaf0f0f)) ### Unknown * Merge pull request #31 from camomillacms/feature/test-page-relation feature: add test for page relation api ([`e970bcb`](https://github.com/camomillacms/camomilla-core/commit/e970bcbc6fcd6653b0522b1f39746548f4dcae31)) * feature: add test for page relation api ([`6d0a749`](https://github.com/camomillacms/camomilla-core/commit/6d0a74954f23a63836812a11683e121d24fa21cb)) * Merge branch 'master' of github.com:camomillacms/camomilla-core ([`ff55136`](https://github.com/camomillacms/camomilla-core/commit/ff55136cb194ff63e19c40152696cde93b16f318)) * tests: added tests for page meta ([`fba4ea8`](https://github.com/camomillacms/camomilla-core/commit/fba4ea8ca863d43e6cf62ac2770402afa6b14e6d)) ## v6.0.1 (2025-06-23) ### Chore * chore: change badge links ([`c99ffb5`](https://github.com/camomillacms/camomilla-core/commit/c99ffb5246309f2748bc33164015e670a8e93af5)) * chore: remove well badge ([`03b33dd`](https://github.com/camomillacms/camomilla-core/commit/03b33dd99c485db9cb2ac5970938c079bc4db19f)) * chore: added some badges to readme ([`63cfe52`](https://github.com/camomillacms/camomilla-core/commit/63cfe52affb307ed0d2e4faa6de97a04f7d81ecf)) * chore: update readme coverage link ([`ae5de5a`](https://github.com/camomillacms/camomilla-core/commit/ae5de5a6fca9c1a7b298d925587d247ec2bbcc2a)) * chore: remove black version for older python versions ([`6ffef00`](https://github.com/camomillacms/camomilla-core/commit/6ffef003b4dfc7b7f74ea97cd378abef52b8f408)) ### Documentation * docs: update changelog ([`9eb74a1`](https://github.com/camomillacms/camomilla-core/commit/9eb74a17c5322051443a1cdcdf18ef1b83579af0)) ### Fix * fix(drf): fix data update on permelinks in disabled i18n environments ([`d29eccf`](https://github.com/camomillacms/camomilla-core/commit/d29eccf1a1e79ab58145c922501670161ae76305)) * fix: added plain to nest to have coherent option schema in DRF ([`828e26e`](https://github.com/camomillacms/camomilla-core/commit/828e26e3c8ac19f230b8aa9948a652b2989fcce6)) * fix: solve remove astro template prefix ([`a6d7eba`](https://github.com/camomillacms/camomilla-core/commit/a6d7eba1db0d5b9d9bbc563b5bc8b1b7282d47fc)) ### Unknown * deps: fix uritemplate deps for python 3.8 ([`8527f66`](https://github.com/camomillacms/camomilla-core/commit/8527f66fa86d8097d8e0be4f4cc4a78b544fff7b)) * Merge pull request #30 from camomillacms/fix/remove-astro-template-fix fix: solve remove astro template prefix ([`39503ef`](https://github.com/camomillacms/camomilla-core/commit/39503efdefe1ab45649530a52df27ef8930a954c)) * deps: update deps for drf Autoschema generation ([`58d981f`](https://github.com/camomillacms/camomilla-core/commit/58d981f3ecf6c815a004a11f869d0f2a84a40025)) * Merge pull request #27 from camomillacms/feature/camomilla-template-sync feature: solve camomilla template sync ([`2699b73`](https://github.com/camomillacms/camomilla-core/commit/2699b73b081ef0004d1e5f0323debe5036e45258)) * feature: solve camomilla template sync - 6 ([`b029b1f`](https://github.com/camomillacms/camomilla-core/commit/b029b1fa2229fb7f6fedb1a73de2a4b96a9c1ef8)) * feature: solve camomilla template sync - 5 ([`e12f4c7`](https://github.com/camomillacms/camomilla-core/commit/e12f4c709aff14848cd8962338ff8df3416c4acf)) * feature: solve camomilla template sync - 4 ([`98f02f4`](https://github.com/camomillacms/camomilla-core/commit/98f02f442e0432c3fba1c2db0f7b881d8804bffb)) * feature: solve camomilla template sync - 3 ([`e783830`](https://github.com/camomillacms/camomilla-core/commit/e783830640a440afdfff36e7e7fcb4bfda8ec0ec)) * feature: solve camomilla template sync - 2 ([`c065b57`](https://github.com/camomillacms/camomilla-core/commit/c065b5753f29c73abd5b140e4696414f62e07cdf)) * feature: solve camomilla template sync ([`d9f7ad2`](https://github.com/camomillacms/camomilla-core/commit/d9f7ad2bf2164e86f47c1ca94fdf889f0289c9a3)) * doc: update how to contribute on docs ([`227215d`](https://github.com/camomillacms/camomilla-core/commit/227215db3087e0dce219ccdf3280bd0f9f72fd93)) ## v6.0.0 (2025-06-04) ### Chore * chore: prepare for 6.0.0 release πŸš€ ([`859da0e`](https://github.com/camomillacms/camomilla-core/commit/859da0e0399877000c67e4c58d0a7f2f9c62d3c0)) * chore: prepare for 6.0.0 release πŸš€ ([`9b2d063`](https://github.com/camomillacms/camomilla-core/commit/9b2d0637b4fdc438256f78b91c90a4829e5f093a)) * chore: fix reamde alignment ([`965a614`](https://github.com/camomillacms/camomilla-core/commit/965a614b29dda0af1e33118c4c9f53f669eb223d)) * chore: fix readme logo ([`e6eafdc`](https://github.com/camomillacms/camomilla-core/commit/e6eafdc95756560f16976834d0917f21d9c3c318)) * chore: update camomilla logo ([`8b98c4d`](https://github.com/camomillacms/camomilla-core/commit/8b98c4dcb240c0e4c0a25ae94f704be47b43944c)) * chore: added logos to vuepress ([`21dcb97`](https://github.com/camomillacms/camomilla-core/commit/21dcb97cc5e2946984b5d2bd01e9fccea5dba26e)) * chore: update docs dependencies and use pnpm ([`c72b8e1`](https://github.com/camomillacms/camomilla-core/commit/c72b8e1ed6d2bb751b804e261ca1346c51378635)) * chore: black . πŸ’… ([`f6924fc`](https://github.com/camomillacms/camomilla-core/commit/f6924fc704bf451a4ca1a171285139d1145642b3)) * chore: upgraded black and added make format command ([`d5e6407`](https://github.com/camomillacms/camomilla-core/commit/d5e64076674b330bc42368aae0bb1488f0df93dc)) * chore: add CODECOV\_TOKEN secret to prevent codecov 429 errors ([`19c38bb`](https://github.com/camomillacms/camomilla-core/commit/19c38bb258450734821a8b26fb3589dc5848e577)) * chore: upload coverage on codecov only once in Test and Coverage job ([`2d3985b`](https://github.com/camomillacms/camomilla-core/commit/2d3985b747e69a36cec8d7051f1531e097253109)) ### Unknown * Merge branch 'master' into next ([`fae865d`](https://github.com/camomillacms/camomilla-core/commit/fae865d25828e8c87c23c4880a6cd85b9b1d7b98)) * doc: update README.md and CHANGELOG ([`704491e`](https://github.com/camomillacms/camomilla-core/commit/704491e6a22cdb68032f7379de73378d01e7b964)) * doc: fix README.md logo ([`6214efb`](https://github.com/camomillacms/camomilla-core/commit/6214efb9b84874162ae3aa83eb6c625d3fa76f6e)) * doc: update README.md ([`dec6da6`](https://github.com/camomillacms/camomilla-core/commit/dec6da6928d152af77e18923e58a600218b36bca)) * deps: added uv.lock ([`fd3e9d2`](https://github.com/camomillacms/camomilla-core/commit/fd3e9d225651854c61acd82983fd76f013bcb44a)) * doc: added CONTRIBUTING.md 🀝 ([`19efde4`](https://github.com/camomillacms/camomilla-core/commit/19efde4dbcec63a6c67635b7510b191ae6c83ec4)) * deps: update django-structured-json-field min version to 0.4.2 ([`fd51fa5`](https://github.com/camomillacms/camomilla-core/commit/fd51fa5f184cb0ed51c787408ee561a2afd9613b)) ## v6.0.0-beta.18 (2025-05-20) ### Documentation * docs: update changelog ([`b5c99b9`](https://github.com/camomillacms/camomilla-core/commit/b5c99b98af9f5925f00fc64cc29f62e4af729c4d)) ### Feature * feat(templates): added template tag and accordion in base.html ([`4d56f9d`](https://github.com/camomillacms/camomilla-core/commit/4d56f9d6febd382f32a5d0ab5ee016d3e8fc447b)) ### Fix * fix(apps.py): added 'structured' in apps because needed in django admin ([`95db0f4`](https://github.com/camomillacms/camomilla-core/commit/95db0f4f9156a0500ea4fd0d137a86c32d69cfe8)) ### Style * style: autopep8 formatting on model\_extras.py ([`60e65f3`](https://github.com/camomillacms/camomilla-core/commit/60e65f36048962264360dbf420d8d4b5e0f20c7e)) * style: autopep8 formatting ([`54dde80`](https://github.com/camomillacms/camomilla-core/commit/54dde80b753c7f8fc2d58de27e85fb4212cca9cb)) ### Unknown * Merge pull request #26 from camomillacms/feature/page-data-in-default-template feat(templates): added template tag and accordion in base.html ([`f197fb8`](https://github.com/camomillacms/camomilla-core/commit/f197fb83501d790ad38faeb398667156faac2166)) * Merge pull request #25 from camomillacms/hotfix/structured-in-apps fix(apps.py): added 'structured' in apps because needed in django admin ([`e87c4a9`](https://github.com/camomillacms/camomilla-core/commit/e87c4a902e56e31765ce5065ff7bfe8b90b135ff)) * Merge pull request #24 from camomillacms/feature/registered-templates-apps Added REGISTERED\_TEMPLATES\_APPS to filter out unwanted templates from selector ([`ea3b34f`](https://github.com/camomillacms/camomilla-core/commit/ea3b34f505cf8d53f0a7ac28320359e6fd313fb3)) ## v6.0.0-beta.17 (2025-05-06) ### Chore * chore: Code review changes ([`f99b6da`](https://github.com/camomillacms/camomilla-core/commit/f99b6daf7d8618d6ea2ff805cea9120291503b28)) * chore: Test model api register ([`8ed0c95`](https://github.com/camomillacms/camomilla-core/commit/8ed0c95c38e4ed651cc976c84fb29f92dc7f9f83)) * chore: Add test for menu features - 2 ([`45cb1b8`](https://github.com/camomillacms/camomilla-core/commit/45cb1b8736ca14460556b056776ee5d1b2aac7d8)) * chore: Add tests for Pages - 2 ([`c3aad58`](https://github.com/camomillacms/camomilla-core/commit/c3aad580789744283275304c48d07521ec968159)) * chore: Add tests for Page Context ([`03fbe6b`](https://github.com/camomillacms/camomilla-core/commit/03fbe6b9c24560eccb0b83df5469fd7a14dabfe1)) * chore: Add tests for Pages ([`7df3c95`](https://github.com/camomillacms/camomilla-core/commit/7df3c95bbe8966fd0d4cc2f31982c3e77a48a418)) * chore: Add test for menu features ([`6ac0f94`](https://github.com/camomillacms/camomilla-core/commit/6ac0f94f3031aed0a6d819c9c96e6d8b4fdbc707)) * chore: Merge pull request #20 from marcobeca/next Make test suite work again and extended testing matrix for cross version testing πŸš€ ([`a4c1787`](https://github.com/camomillacms/camomilla-core/commit/a4c17873ac665f6b37747a2004764e72175d3717)) * chore: update pyproject.toml ([`ea64cbb`](https://github.com/camomillacms/camomilla-core/commit/ea64cbb08ec5bfd5dc5dee8d2e010247a7aa4839)) * chore: Update test matrix ([`18d3a8e`](https://github.com/camomillacms/camomilla-core/commit/18d3a8e219fb48caff3f162dd20c462ec66553bc)) * chore: pipeline test restore ([`77bee79`](https://github.com/camomillacms/camomilla-core/commit/77bee7997835250fda767f377af4814561fa3414)) * chore: fix requirements ([`e403494`](https://github.com/camomillacms/camomilla-core/commit/e403494f74f8cb79d164821b6dca231e5d90124f)) * chore: move repo ([`6992c85`](https://github.com/camomillacms/camomilla-core/commit/6992c853334c87366452c4e5031b6a703488e22e)) * chore: update docs script ([`094ca16`](https://github.com/camomillacms/camomilla-core/commit/094ca163d9554fbc165d94332b9aff7c5987b901)) ### Documentation * docs: update docs for pages and structured fields ([`332ceb7`](https://github.com/camomillacms/camomilla-core/commit/332ceb7c506665c67e2c2f1945d3af0a2b3a2819)) ### Feature * feat(templates): use REGISTERED\_TEMPLATES\_APPS if exists to select templates files ([`cc4b4b4`](https://github.com/camomillacms/camomilla-core/commit/cc4b4b46df4d6c8bec03c8617b929081fc85f07b)) * feat: added date updated and date created autofields to UrlRedirect ([`f263224`](https://github.com/camomillacms/camomilla-core/commit/f26322469804f4a08a0439aaab3db228c6c38b14)) * feat: remove autopermalink flag if permalink is manually edited from admin page ([`8ac6cca`](https://github.com/camomillacms/camomilla-core/commit/8ac6cca4505241b7fa6387cacc11035dac887778)) * feat: added redirect management to router api ([`0a16ecc`](https://github.com/camomillacms/camomilla-core/commit/0a16eccd17a5f418b42fd9ba668f914634084b54)) * feat: added possibility to manipulate permalink from django admin page ([`9a117d5`](https://github.com/camomillacms/camomilla-core/commit/9a117d585901c55db80b881279f6000fec2edd7d)) * feat: added autoredirect ([`21bb77b`](https://github.com/camomillacms/camomilla-core/commit/21bb77bbb499ddfe351840da0bfe8861aa0c389d)) ### Fix * fix: fix filter parser not working with simple cases πŸ₯Έ ([`0b93d63`](https://github.com/camomillacms/camomilla-core/commit/0b93d6319ed9496b53bf52ac8d177cd9b014f0ef)) * fix: added redirects for old urls for retrocompatibility ([`17965fd`](https://github.com/camomillacms/camomilla-core/commit/17965fd28b36a071ca2fcbfa145381697c5ed2f4)) * fix: fix permalink management on disabled translation ([`769ffa9`](https://github.com/camomillacms/camomilla-core/commit/769ffa96e7670195509f0417bc6081678d62730c)) * fix: fix admin permalink editing ([`e1df3b2`](https://github.com/camomillacms/camomilla-core/commit/e1df3b2b77e5e0cfcdcf44a7e3167fb5c1837ca2)) * fix: fix article admin page ([`414b677`](https://github.com/camomillacms/camomilla-core/commit/414b677e3778ced2118d0c20b23f6d4ea0407d39)) * fix: fix redirects consistency ([`110e16e`](https://github.com/camomillacms/camomilla-core/commit/110e16e5667ec937bf2c99cf79b61135009a2923)) ### Refactor * refactor: removed some old code and refactor Translations mixins ([`ee92457`](https://github.com/camomillacms/camomilla-core/commit/ee92457c2cd28d9d898e502a55f37c45acf8edc9)) * refactor: better abstract page method typing ([`2d9ecf8`](https://github.com/camomillacms/camomilla-core/commit/2d9ecf83a230c1fc71dc0660db821bdb31b9e8a5)) * refactor: move urlnode manager to manager directory ([`53e2a16`](https://github.com/camomillacms/camomilla-core/commit/53e2a16d4ede0f341f62bd42e2f9940a7f1fc837)) * refactor: autopep8 πŸ’… ([`a9fc426`](https://github.com/camomillacms/camomilla-core/commit/a9fc426d19b5b892373ed4d018f0762705fa2e2e)) * refactor: refactor camomilla theme admin code disposition ([`d311032`](https://github.com/camomillacms/camomilla-core/commit/d311032501f4069cd49e8ddb2e2e7ce45507c4f5)) * refactor: autopep8 πŸ’… ([`90389a2`](https://github.com/camomillacms/camomilla-core/commit/90389a2a23cbe08ddcb2493adeb0dacda615d8ee)) * refactor: refactor redirects code ([`0cccb00`](https://github.com/camomillacms/camomilla-core/commit/0cccb00611390013dcf154864c3e5fea13a5f023)) * refactor: refactor all optimize serializer mixin code ([`6327502`](https://github.com/camomillacms/camomilla-core/commit/63275026da5b95e93cd428ee15458324e4baa1d3)) * refactor(api): change file structures of views and serializers mixins ([`20b7937`](https://github.com/camomillacms/camomilla-core/commit/20b79370c82c0f888b88dc72b79f5297a9335018)) ### Unknown * Merge pull request #23 from marcobeca/next Add Tests for Media models and register api ([`1af8c8c`](https://github.com/camomillacms/camomilla-core/commit/1af8c8cccb2b31dc08d99bb2576455beb9eb1ae7)) * chore: Update tests for Media Models ([`e7e9c66`](https://github.com/camomillacms/camomilla-core/commit/e7e9c6687482ec93b07f4fc0796c78527756d15e)) * Merge pull request #22 from marcobeca/next Add Tests ([`9c08a40`](https://github.com/camomillacms/camomilla-core/commit/9c08a4071e34477b040537991982e04d57d3c3e9)) * deps: update deps and sobstitute ckdeitor with tinymce ([`8bc3a99`](https://github.com/camomillacms/camomilla-core/commit/8bc3a9918116d5da24dce6dc1c035a703ff69197)) * Merge branch 'next' of github.com:lotrekagency/camomilla into next ([`41b57de`](https://github.com/camomillacms/camomilla-core/commit/41b57de0ce189a2b9003b1c19cc35c5aad175f97)) ## v6.0.0-beta.16 (2024-11-09) ### Chore * chore: update example app ([`a84bb51`](https://github.com/camomillacms/camomilla-core/commit/a84bb51b40f4de8bc936ad96aa8b8bb273087691)) ### Feature * feat(api): added possibility to filter api fields with fields query param (something like graphql) enjoy ⭐ ([`5a9b94b`](https://github.com/camomillacms/camomilla-core/commit/5a9b94b107833ddd9d5945f19393e97861337036)) * feat(api): added query parser for more complex query with and and or conditions ([`5f2bd5c`](https://github.com/camomillacms/camomilla-core/commit/5f2bd5cca8bd99d7877d4ff3f83e344d313b2817)) ### Fix * fix(menu): follow preview link if previewing page ([`201c22d`](https://github.com/camomillacms/camomilla-core/commit/201c22d64c7f9fb5da28194fc224f09b0bbc45ac)) * fix(model\_api): fix router urlpatterns registering on local var" ([`4726328`](https://github.com/camomillacms/camomilla-core/commit/4726328f83a64897e63a30044a91e4a65a88af99)) * fix(openapi): fix openapi schema generation ([`03cada3`](https://github.com/camomillacms/camomilla-core/commit/03cada3570b4d1b05fc9232d274e8d954bc47a4c)) * fix(media): update optimization scripts to be compatible with future django versions ([`a307032`](https://github.com/camomillacms/camomilla-core/commit/a3070328bb24bc3c4044d3d7c5315aa456773945)) * fix(model\_api): fix authentication problems on model\_api registered endpoints ([`b2d5049`](https://github.com/camomillacms/camomilla-core/commit/b2d5049c657ee113672b8add63592a93527b45ab)) ### Refactor * refactor: style πŸ’… ([`3c99ad8`](https://github.com/camomillacms/camomilla-core/commit/3c99ad8c0afd481b270d2ea9f08a9c8e49b979f6)) ### Unknown * deps: update django deps ([`9d4a426`](https://github.com/camomillacms/camomilla-core/commit/9d4a426df6779764122c3bc7c81ad88a8b23419e)) * tests: fix tests for new django version ([`8c8adcb`](https://github.com/camomillacms/camomilla-core/commit/8c8adcb8bd9db0ea6eb7997c3ee33bf7d934b6c1)) * tests: removed some old tests ([`23cbcaa`](https://github.com/camomillacms/camomilla-core/commit/23cbcaa730ed7fa638fcc0adf308a5796e2becba)) * tests: more tests for media and model api ([`6fb5d6e`](https://github.com/camomillacms/camomilla-core/commit/6fb5d6ed9fd4c10c587fda0a0f683ea8a46e9621)) * Merge branch 'next' of github.com:lotrekagency/camomilla into next ([`5e4182e`](https://github.com/camomillacms/camomilla-core/commit/5e4182e68e8c9936f46ca1ae5ab867a22e1e1d54)) * tests: more tests ([`33d67db`](https://github.com/camomillacms/camomilla-core/commit/33d67dbe54b5d707fd700e54873eea64f1a64867)) ## v6.0.0-beta.15 (2024-10-26) ### Chore * chore: remove unused imports ([`28aef13`](https://github.com/camomillacms/camomilla-core/commit/28aef13ebb7659d728e4e820ce2754b9171cdcb8)) ### Feature * feat(structured): upgrade features moving to django-structured-fields ([`1d27f5f`](https://github.com/camomillacms/camomilla-core/commit/1d27f5f562ba86d0f81e3d3e40196eed03ef1aa3)) * feat: removed slug and autogenerate permalink from title ([`1cf082f`](https://github.com/camomillacms/camomilla-core/commit/1cf082fe0e5ff29372dcb3872fa93608b2883339)) * feat: add permalink direct editing in abstract page ([`d42b341`](https://github.com/camomillacms/camomilla-core/commit/d42b341084abe45175d9d3822b51c5540b7474a9)) ### Unknown * deps: fix rest framework versioning ([`c31ef16`](https://github.com/camomillacms/camomilla-core/commit/c31ef169f9d6f455f749bbe70a85daf5027050ae)) ## v6.0.0-beta.14 (2024-03-25) ### Fix * fix: fix page get\_or\_create manager ([`6b8be36`](https://github.com/camomillacms/camomilla-core/commit/6b8be366502f89e42f86da7611d0189990880080)) ### Unknown * Merge branch 'next' of github.com:lotrekagency/camomilla into next ([`3af75ba`](https://github.com/camomillacms/camomilla-core/commit/3af75ba08c6fc7fef1fa07905968245a93293cb0)) ## v6.0.0-beta.13 (2024-03-25) ### Feature * feat: allow composite slugs in page models without a parent ([`4265a76`](https://github.com/camomillacms/camomilla-core/commit/4265a76c655bac27fdb4182707ef035265f90ccb)) ## v6.0.0-beta.12 (2024-01-29) ### Fix * fix(homepage): fix get\_or\_create\_homepage ([`a3c1095`](https://github.com/camomillacms/camomilla-core/commit/a3c1095bfa715f3d2de0b6aec8bba75fb051c72d)) * fix(typing): fixed python 3.8 typing compatibility ([`df27aa2`](https://github.com/camomillacms/camomilla-core/commit/df27aa27d8de5619b75daf2a6272799e996fe33d)) ### Unknown * Merge pull request #17 from lotrekagency/fix/template-parameter Fixed template update issue. ([`3e12882`](https://github.com/camomillacms/camomilla-core/commit/3e128826f20bccb6667cc87c322f724554e296c8)) * Fixed template update issue. ([`0b05519`](https://github.com/camomillacms/camomilla-core/commit/0b05519e3e4482fb8930b64982168f6603c4076a)) * Fixed template update issue. ([`957ff1f`](https://github.com/camomillacms/camomilla-core/commit/957ff1feb7270922d5aab78a7ba9f8478d0958d9)) ## v6.0.0-beta.11 (2023-11-09) ### Fix * fix: get\_absolute\_url to remove / from home in sitemap ([`fa42b1b`](https://github.com/camomillacms/camomilla-core/commit/fa42b1bf12a8cfa2ae52ae036f1b013d6b0c62b2)) ### Unknown * Merge branch 'next' of github.com:lotrekagency/camomilla into next ([`8abeec6`](https://github.com/camomillacms/camomilla-core/commit/8abeec632a22abffd590743df01f788fa2d4e942)) ## v6.0.0-beta.10 (2023-11-08) ### Fix * fix: fix language switch redirect ([`d87a031`](https://github.com/camomillacms/camomilla-core/commit/d87a0318082149b54b9192f8c08d898b90c57a40)) * fix: fix reverse url to return url with slash if append\_slash ([`85d50a9`](https://github.com/camomillacms/camomilla-core/commit/85d50a9b0f229d1bdc33f9d4443024d7953fb664)) ### Unknown * Merge branch 'next' of github.com:lotrekagency/camomilla into next ([`a9f6365`](https://github.com/camomillacms/camomilla-core/commit/a9f6365791f566af22d0bd9737f20738f3a8689d)) ## v6.0.0-beta.9 (2023-11-08) ### Documentation * docs: update changelog ([`7dd4edf`](https://github.com/camomillacms/camomilla-core/commit/7dd4edf38b6800d8a258714b617b3899cb1e4f5b)) ### Fix * fix: fix APPEND\_SLASH django config ([`81a43e2`](https://github.com/camomillacms/camomilla-core/commit/81a43e238c5c3d524b353c5d0564b3e1649b16a9)) ## v6.0.0-beta.8 (2023-10-10) ### Chore * chore: update test app to use sitemap ([`d049220`](https://github.com/camomillacms/camomilla-core/commit/d0492205b7a262b8ab0d5514c43125b121989ab0)) * chore: black . πŸ’… ([`eb78a3b`](https://github.com/camomillacms/camomilla-core/commit/eb78a3bcc88266a9dcd3daca76ce6e7b7db2b6be)) * chore: added some comments on code ([`0b1849b`](https://github.com/camomillacms/camomilla-core/commit/0b1849bd9dd601e51b61bafa0476ff78163f50d8)) * chore: code format ([`53af6b4`](https://github.com/camomillacms/camomilla-core/commit/53af6b47b3dd35af33575aebc4e158de9077d341)) * chore: added some typechecking to optimized storage ([`3f8e60a`](https://github.com/camomillacms/camomilla-core/commit/3f8e60a96f254f99bc566735a101a6a5d4acaec0)) ### Documentation * docs: update docs emojis πŸ˜ƒ ([`53e511c`](https://github.com/camomillacms/camomilla-core/commit/53e511c074a54aeeaba9ee470e7c58239e2857f2)) * docs: fix StructuredJSONField documentation (wrong field name in examples) ([`1962b3b`](https://github.com/camomillacms/camomilla-core/commit/1962b3b340c193233c4b3adcf080bb0d6f64e99f)) * docs: added use sitemap on docs ([`5924ade`](https://github.com/camomillacms/camomilla-core/commit/5924ade5a49d8ee58c5cb7bce671ae29b5c47659)) * docs: update changelog ([`70c92e1`](https://github.com/camomillacms/camomilla-core/commit/70c92e1fad48e20dd497bba31c6f5e56595906cd)) ### Feature * feat: added camomilla sitemap ([`0071ce3`](https://github.com/camomillacms/camomilla-core/commit/0071ce37aefc569c75344c10a005e84eb2cf0c05)) * feat: added is public annotation to urlnodes ([`19f6fcb`](https://github.com/camomillacms/camomilla-core/commit/19f6fcbe1f0581bb9d823a72d12e344ddfe29b9e)) * feat: accept also single lang fields like title\_en from serializers ([`b1244d5`](https://github.com/camomillacms/camomilla-core/commit/b1244d5ff36f351a43b66c2411fa2ec0e32a0fd4)) ### Fix * fix: fix structured cache getting value when not needed ([`b3f7c2d`](https://github.com/camomillacms/camomilla-core/commit/b3f7c2d02474252a348e588922157ee1de964b39)) * fix: fix nest to plain typing ([`d339a47`](https://github.com/camomillacms/camomilla-core/commit/d339a47998eee315eb29d6e5007df54d40bde70d)) ### Refactor * refactor: better typing for structured cache ([`eac24b6`](https://github.com/camomillacms/camomilla-core/commit/eac24b643dd83dbd6f7c0f444515aa1901d88898)) ### Test * test: add rest framework settings to example app ([`537dee1`](https://github.com/camomillacms/camomilla-core/commit/537dee18643b0d389d3786eb0aa4f8c8902f677f)) * test: fix test api ([`c7a1f97`](https://github.com/camomillacms/camomilla-core/commit/c7a1f972b6b385637bdcdda78521b8eb0103a4dc)) ## v6.0.0-beta.7 (2023-09-30) ### Chore * chore: update semanti releases branches ([`e0a4864`](https://github.com/camomillacms/camomilla-core/commit/e0a48641c8436798762fbbf29a49c09e0db704bb)) * chore: update example app ([`30f604f`](https://github.com/camomillacms/camomilla-core/commit/30f604fbbf1265aef5ee87ec25459a2e4facc7e1)) ### Documentation * docs: update changelog ([`3b8a766`](https://github.com/camomillacms/camomilla-core/commit/3b8a766a5a8655afd8e158a3b51b26217513d93c)) * docs: update version ([`6314005`](https://github.com/camomillacms/camomilla-core/commit/631400540ea3fec443cd1b72c38f68eb571d5ef0)) ### Fix * fix: fix optimized storage increasing file sizes in some cases ([`7547c45`](https://github.com/camomillacms/camomilla-core/commit/7547c457cdd0a2f197118de7f1902b693b902c7a)) ## v6.0.0-beta.6 (2023-09-30) ### Documentation * docs: update templates\_context docs ([`9ecbb4e`](https://github.com/camomillacms/camomilla-core/commit/9ecbb4ead9f63c731f463aabd97a7f758f2a537e)) * docs: update docs ([`9ef5674`](https://github.com/camomillacms/camomilla-core/commit/9ef5674e1028b763ada0c1ba2df43693869b65a0)) ### Fix * fix: fix template context autodiscover" ([`2189fe9`](https://github.com/camomillacms/camomilla-core/commit/2189fe95c6d822a13bd432dc05803785133522ce)) * fix: fix camomilla context init import ([`ac8e86b`](https://github.com/camomillacms/camomilla-core/commit/ac8e86b1ca570be756810a7fcf748b137bf19499)) * fix: fix camomilla context init ([`01914bd`](https://github.com/camomillacms/camomilla-core/commit/01914bddcc13903917c71b7091e0b7d0dc454e70)) * fix: fix camomilla context \_\_init\_\_py ([`4de1519`](https://github.com/camomillacms/camomilla-core/commit/4de1519521babef9eb5237b182ec39cf261862b2)) ### Refactor * refactor: move context engine to templates\_context module ([`d6a86f6`](https://github.com/camomillacms/camomilla-core/commit/d6a86f614ce229952001612cfaaa692e31d59bdb)) ## v5.8.6 (2023-09-25) ### Chore * chore: always try to upload pypi ([`f92880c`](https://github.com/camomillacms/camomilla-core/commit/f92880c17c936af0793956b704f1511a37d66d30)) * chore: update testing workflow ([`0b9e073`](https://github.com/camomillacms/camomilla-core/commit/0b9e073559fada746647ed089248ff43d4e0d567)) * chore: better job step splitting ([`9d158d5`](https://github.com/camomillacms/camomilla-core/commit/9d158d5836431171fb1a6fd11f4f7dc90b22b10f)) * chore: fix run build in cd.yml ([`2cf8a30`](https://github.com/camomillacms/camomilla-core/commit/2cf8a3086cd28c0b57679692645e45a3f6be025d)) * chore: fix build run statement ([`d9d5f14`](https://github.com/camomillacms/camomilla-core/commit/d9d5f14567c24f4713b223a896ff6d11c26b5147)) * chore: decouple package build from version tagging in cd.yml ([`4c96a8e`](https://github.com/camomillacms/camomilla-core/commit/4c96a8e4df9b9795ec06aff479f24f05ebeb599b)) * chore: set force release options to release workflow ([`852f37f`](https://github.com/camomillacms/camomilla-core/commit/852f37f53c3e3e3eef2e80b1fe1cae07ed8f7a08)) ### Unknown * Merge branch 'master' into next ([`3af5bbc`](https://github.com/camomillacms/camomilla-core/commit/3af5bbc24807654fea884448dd398c5a3f6af450)) * Merge branch 'master' into next ([`57d1d9f`](https://github.com/camomillacms/camomilla-core/commit/57d1d9f17f65970a272153338133e0b3e8315593)) * Merge branch 'master' into next ([`64b3a65`](https://github.com/camomillacms/camomilla-core/commit/64b3a65e3a8cf91d1f90a1942bc45daaa0c3bee5)) * Merge branch 'master' into next ([`72d67e3`](https://github.com/camomillacms/camomilla-core/commit/72d67e31e264a7d5a7d50a7a1ce06d27ae65ea8c)) * Merge branch 'master' into next ([`7d387ba`](https://github.com/camomillacms/camomilla-core/commit/7d387ba380036baf9fa534c86f0595a4adcbd782)) * Merge branch 'master' into next ([`b7f0656`](https://github.com/camomillacms/camomilla-core/commit/b7f0656b2f86179ac672deaa1b24668efa5d50ff)) * Merge branch 'next' of github.com:lotrekagency/camomilla into next ([`88ad9a2`](https://github.com/camomillacms/camomilla-core/commit/88ad9a2b45d88e621f1f5ae422c9bf8fccb66020)) * Merge branch 'master' into next ([`cccacea`](https://github.com/camomillacms/camomilla-core/commit/cccaceace13ab576a990daa9d7344d3043be8a4c)) ## v6.0.0-beta.5 (2023-09-25) ### Chore * chore: update permissions on release githubworkflow ([`e857992`](https://github.com/camomillacms/camomilla-core/commit/e85799203e6a13182b61b0457ee1a48e973e76ff)) * chore: update permissions on release githubworkflow ([`dd9bf9d`](https://github.com/camomillacms/camomilla-core/commit/dd9bf9d0ccbb2759d0f214c179d61dc997a78f9b)) * chore: update cd ([`c936605`](https://github.com/camomillacms/camomilla-core/commit/c9366057684d928bd8b334affaa0264637ccd4e4)) * chore: update cd ([`1640461`](https://github.com/camomillacms/camomilla-core/commit/1640461b7bacc9851a2c8860b2cdb80e32744500)) * chore: update cd ([`683f79a`](https://github.com/camomillacms/camomilla-core/commit/683f79a6dfe34f0fc68dc2ab7a98ccb77dfca3c4)) * chore: cd remove bad config ([`e2e2d45`](https://github.com/camomillacms/camomilla-core/commit/e2e2d45420ffd13c95e697e397c6100fa272e410)) * chore: fix versioning ([`54f3868`](https://github.com/camomillacms/camomilla-core/commit/54f38685cc0d69bc33304138c3e92998269d134f)) * chore: make cd and ci triggerable ([`8cf368b`](https://github.com/camomillacms/camomilla-core/commit/8cf368bf39d3159454eb4b5b1bfecd50cf06a8f9)) * chore: move to pyproject.toml ([`fab43fd`](https://github.com/camomillacms/camomilla-core/commit/fab43fd5bbf2a70b9d80fe20fa083a7e00bee663)) * chore: fic CD pipeline not getting config file for semantic release ([`e851c7e`](https://github.com/camomillacms/camomilla-core/commit/e851c7ead9ce643f77c368eebfabb0eb5ec979a0)) * chore: update semantic-release and CD pipe ([`6479126`](https://github.com/camomillacms/camomilla-core/commit/6479126b6da3db96a011f708dbbb85d138c26bfb)) * chore: update example with ckeditor urls ([`5f93a5b`](https://github.com/camomillacms/camomilla-core/commit/5f93a5b90a56bc6a7bbd4a2be9a49355c07a037c)) * chore: added locale middleware, to example app settings ([`f4483fc`](https://github.com/camomillacms/camomilla-core/commit/f4483fc883cb937b1762a6a309e83b99fa366c03)) * chore: created example app and make test refer to it's configuration ([`9d4411f`](https://github.com/camomillacms/camomilla-core/commit/9d4411f802978775e4dda49e8f454efe1ad22823)) * chore: fix test environment ([`b4b21cf`](https://github.com/camomillacms/camomilla-core/commit/b4b21cf1fe0f9193b5da9336c06b23aba09e5927)) * chore: fix flake8 errors ([`7396241`](https://github.com/camomillacms/camomilla-core/commit/739624190528bd5f175f7e4bfee3519400ddf5b6)) * chore: black . πŸ’… ([`31cc0d7`](https://github.com/camomillacms/camomilla-core/commit/31cc0d7c67f328c5c58cc9ea1b4563fb3086bc00)) ### Documentation * docs: update docs ([`35e5c52`](https://github.com/camomillacms/camomilla-core/commit/35e5c5271d928830a77540e2cbf1a68b379ba8de)) ### Feature * feat: raise pydantic errors as drf validation errors in apis ([`0cfc33f`](https://github.com/camomillacms/camomilla-core/commit/0cfc33f349626720f57d7c6b3853f28c0250ea3d)) * feat: make template context register work also for subclasses ([`a6287b8`](https://github.com/camomillacms/camomilla-core/commit/a6287b845d720d8aa3a5dff0e348d30ea91e7051)) ### Fix * fix: fix page is public prop to compute without fallbacks ([`fa80d1c`](https://github.com/camomillacms/camomilla-core/commit/fa80d1c1245fed7b4591e24417ddcb8632cb81ea)) * fix: fix camomilla.theme bootstrap ([`773af99`](https://github.com/camomillacms/camomilla-core/commit/773af990380e2b1cdcd8000050b829db083ec893)) * fix: fix lang switch template ([`1d41ac2`](https://github.com/camomillacms/camomilla-core/commit/1d41ac283b63720f956e7520455b4598f369c956)) * fix: fix structured field migrations ([`0320cdb`](https://github.com/camomillacms/camomilla-core/commit/0320cdbd9316d90c4a090ffa09b203e6a72fa5ef)) ### Test * test: drop database before running tests ([`9200703`](https://github.com/camomillacms/camomilla-core/commit/92007036d79926592c103d3da2f1a9ceb3fc7683)) * test: fix database boostrap for test ([`2be8951`](https://github.com/camomillacms/camomilla-core/commit/2be8951844380e6ce6cd10bea688b9ad94f8f19a)) ### Unknown * Merge branch 'master' into next ([`4de8c96`](https://github.com/camomillacms/camomilla-core/commit/4de8c96deb3a8182dd36c76f8f67df63508f4d68)) * Merge branch 'master' into next ([`1456374`](https://github.com/camomillacms/camomilla-core/commit/1456374269913a948ccafc3eceab62fb55695de3)) * Merge branch 'master' into next ([`4ce109e`](https://github.com/camomillacms/camomilla-core/commit/4ce109e5f4d0d1c594eeef402a616baa6edf4005)) * Merge branch 'master' into next ([`eeafe84`](https://github.com/camomillacms/camomilla-core/commit/eeafe8471657268a3bf2f84a6c053a838e36fa57)) * Merge branch 'master' into next ([`7bfe473`](https://github.com/camomillacms/camomilla-core/commit/7bfe473bed9c5f9c14979606cbcdfad96aedd536)) * Merge branch 'master' into next ([`0dc4827`](https://github.com/camomillacms/camomilla-core/commit/0dc482746590e13350300f7fa931bd0306f33152)) * Merge branch 'master' into next ([`3f8c533`](https://github.com/camomillacms/camomilla-core/commit/3f8c5336dd75dfbeb91a9bf066d94576ed3554a2)) * Merge branch 'master' into next ([`7692c5b`](https://github.com/camomillacms/camomilla-core/commit/7692c5b4d83365cd0082cceaa50a93fe3219d0e6)) * Merge branch 'master' into next ([`c9298e3`](https://github.com/camomillacms/camomilla-core/commit/c9298e3ea1ec5207ecd22a88f6d16c725c94c605)) ## v6.0.0-beta.4 (2023-09-09) ### Documentation * docs: update docs ([`a88da89`](https://github.com/camomillacms/camomilla-core/commit/a88da898131fef67e716ce40182c2f639b8365dd)) * docs: update docs ([`3a0018a`](https://github.com/camomillacms/camomilla-core/commit/3a0018ab1371d0b8a6a7e30607bd555b48f80718)) * docs: update docs ([`97722ae`](https://github.com/camomillacms/camomilla-core/commit/97722ae67600ad9d20a27f376d4301be053ca95c)) * docs: update docs ([`8a6c006`](https://github.com/camomillacms/camomilla-core/commit/8a6c0063ae005df204d16ce7747c84b9cdc68d9c)) * docs: update docs ([`4baebf8`](https://github.com/camomillacms/camomilla-core/commit/4baebf820e3758a01a9ed4a81b3aba2f7591ecbe)) ### Feature * feat: added cache disable setting for structured field ([`39d726b`](https://github.com/camomillacms/camomilla-core/commit/39d726b8ce2eb9bea5aa48486c1010da4a098c87)) * feat: added pages-router endpoint and many new features for pages api ([`6a7497a`](https://github.com/camomillacms/camomilla-core/commit/6a7497a2f3f6e1ce9d12dae7e521f357188bffb7)) ## v6.0.0-beta.3 (2023-09-08) ### Chore * chore: added some notes ([`c23d25b`](https://github.com/camomillacms/camomilla-core/commit/c23d25b2172c7cbefd6305b1bad3d921cb5c5590)) * chore: black . πŸ’… ([`7988c51`](https://github.com/camomillacms/camomilla-core/commit/7988c51c48f685acd0734ffda52ac09402cc84c5)) ### Documentation * docs: update docs ([`9df236a`](https://github.com/camomillacms/camomilla-core/commit/9df236a99a62a29e33f340e1443ab66b0d563455)) ### Feature * feat: make context funtions parameters free ([`16b3de7`](https://github.com/camomillacms/camomilla-core/commit/16b3de7ca566689ad572a3a1f29bb4474a678d75)) * feat: added context managers ([`8555a15`](https://github.com/camomillacms/camomilla-core/commit/8555a15f3671738853d6d6bbf162724201831a4a)) * feat: added settings AUTO\_CREATE\_HOMEPAGE, default=True ([`154c904`](https://github.com/camomillacms/camomilla-core/commit/154c9041dc3fbba5ed776dd904035316f3783724)) * feat: update serializers ([`8b71f27`](https://github.com/camomillacms/camomilla-core/commit/8b71f27beba6a1cf0de9539c6acba0bdb9fcc7ff)) * feat: update structuredJSONField and camomilla menu ([`ffa6c08`](https://github.com/camomillacms/camomilla-core/commit/ffa6c084468fcb7a0e43d0b84f4d2e56498ae51b)) * feat: added a cache engine ([`6277c30`](https://github.com/camomillacms/camomilla-core/commit/6277c30209934f019f8df9a91868291df1bc597e)) * feat: added first draft of pydantic ModelBase with django Fk and Qs support ([`760d62e`](https://github.com/camomillacms/camomilla-core/commit/760d62e01c07f3306b91428a969aa8c90712c205)) * feat: better error for draft 404 pages ([`7eb9c06`](https://github.com/camomillacms/camomilla-core/commit/7eb9c06b86c86dc661d895c5b62c1bd8b8a8892f)) * feat: added jsonform in admin ([`f2afcd4`](https://github.com/camomillacms/camomilla-core/commit/f2afcd4cc4db290441dff71a7955dd8e21acdc99)) * feat: added menu model to admin page ([`8df743b`](https://github.com/camomillacms/camomilla-core/commit/8df743b23e259dca2d55b283ea798a333746f404)) ### Fix * fix: fix X\_FRAME\_OPTIONS default for camomilla admin ([`383e488`](https://github.com/camomillacms/camomilla-core/commit/383e488beead8f147dd44bfcd5b1832fc9e67e39)) * fix: fix Iterable types that are actually Sequences ([`41fc0f4`](https://github.com/camomillacms/camomilla-core/commit/41fc0f4dc1a96c61c3c042fb81478017cd555760)) * fix: fix cache making call before checking existance ([`fbfd51f`](https://github.com/camomillacms/camomilla-core/commit/fbfd51fe140730cb2bd2f8b7b88c8cd77344a1fd)) * fix: fix openapi json schema to point right definitions also inside definition refs ([`29a1311`](https://github.com/camomillacms/camomilla-core/commit/29a13117bca4a5a7df575fd3c7569aab64fee87c)) * fix: fix openapi json schema to point right definitions ([`0decf18`](https://github.com/camomillacms/camomilla-core/commit/0decf1805010f49ed3aff4d4c3646bbff7a2109b)) * fix: move admin registration in camomilla theme ([`da6a025`](https://github.com/camomillacms/camomilla-core/commit/da6a025315d5ef9f63dba5b153ef4ef58241e56e)) * fix: fix json schema ([`e502be0`](https://github.com/camomillacms/camomilla-core/commit/e502be05538e74a1d94e77af80201efde44fcbe8)) ### Performance * perf: decrease database hits on dumps with many qs ([`3a52d04`](https://github.com/camomillacms/camomilla-core/commit/3a52d04ee26debe4ad5b0aaff3856b07db4bf7d9)) ### Refactor * refactor: remove print ([`016c4a1`](https://github.com/camomillacms/camomilla-core/commit/016c4a16862cf5f9a69caa1c30c06ec46dd8b823)) * refactor: replace old structured fields with new ones πŸŽ‰ ([`303c04c`](https://github.com/camomillacms/camomilla-core/commit/303c04c4faa94ec79ecda905ef6c5fd5853016c1)) ### Test * test: fix flake8 test ([`f849c19`](https://github.com/camomillacms/camomilla-core/commit/f849c19e0323667f6d9ac1973c0149e533896e11)) ### Unknown * performance: fetch cache only when needed ([`9de4c4b`](https://github.com/camomillacms/camomilla-core/commit/9de4c4b921f551f27ffc179e6672d2d7496bd648)) ## v6.0.0-beta.2 (2023-08-08) ### Chore * chore: set release branch to next for v6 ([`f2b5d8e`](https://github.com/camomillacms/camomilla-core/commit/f2b5d8e1c1db186c337d34eedeb4f67fae2f5edc)) ### Documentation * docs: update docs ([`08d0564`](https://github.com/camomillacms/camomilla-core/commit/08d0564e71f83363dab7c0f3276187bc973ed5cf)) * docs: update media docs ([`a2fc0cc`](https://github.com/camomillacms/camomilla-core/commit/a2fc0cc1e3dde91f6cb9d27892f7682e277a8765)) * docs: update media docs ([`b9de34c`](https://github.com/camomillacms/camomilla-core/commit/b9de34c3127ba17443ebaa86220fcc28d207d12b)) * docs: update docs ([`9a2261d`](https://github.com/camomillacms/camomilla-core/commit/9a2261dbf491ee8a5b1023791dd76737db5497ae)) * docs: update docs ([`fda7864`](https://github.com/camomillacms/camomilla-core/commit/fda7864b4979cf33ccaf9af256bda77f48eb82a8)) * docs: added changelog to documentation ([`a2bafc0`](https://github.com/camomillacms/camomilla-core/commit/a2bafc00e0e7d1c5b9fa2120c2e0e4405ef353d7)) ### Feature * feat: added openapi schema to api ([`c242c83`](https://github.com/camomillacms/camomilla-core/commit/c242c83d76835f17d74f0e5af0dcdcb448b17ea2)) * feat: added is translated utils in TranslationSerializerMixin ([`472f84f`](https://github.com/camomillacms/camomilla-core/commit/472f84fed902b4105357440f62fc13f7f3ecfa2a)) * feat: added favicon in admin panel ([`8b17888`](https://github.com/camomillacms/camomilla-core/commit/8b1788873d77c2cdcc7cbf1dec368c0e86a897da)) * feat: add page preview in admin page ([`078e925`](https://github.com/camomillacms/camomilla-core/commit/078e9251cbc1aa525ca738616c259183e0a98e2a)) * feat: dynamically set template choices ([`23f22bc`](https://github.com/camomillacms/camomilla-core/commit/23f22bc4215cfeb34f18594f98844a2d429681d3)) * feat: added rosetta compatibility to admin theme ([`a3d653b`](https://github.com/camomillacms/camomilla-core/commit/a3d653bd8a1bd68b01a672bda2a7962090ef3b38)) * feat: update camomilla admin theme ([`9f00116`](https://github.com/camomillacms/camomilla-core/commit/9f00116e2f4c4212fa4c375426da6aefac0d9586)) ### Fix * fix: fix unique permalink validato in api ([`3e2f856`](https://github.com/camomillacms/camomilla-core/commit/3e2f856ac765b40ad2ff53d3499995fbf7731231)) * fix: fix django admin permalink generation ([`1f6b60c`](https://github.com/camomillacms/camomilla-core/commit/1f6b60cc85ff37bcb68ea1a8de6de5346447672e)) ### Refactor * refactor: move api depth settings ([`d5ff8db`](https://github.com/camomillacms/camomilla-core/commit/d5ff8dbef310be731294e5b79c87b13d68b2bb66)) ### Unknown * deps: update pillow deps and add django-admin-interface ([`bd9270e`](https://github.com/camomillacms/camomilla-core/commit/bd9270eb0a1e5af2f07bcfacd7b427aaf4dbe003)) * deps: remove djlotrek dependency ([`c6ffffb`](https://github.com/camomillacms/camomilla-core/commit/c6ffffbb011efa6f9a932f61af6481327e94f504)) * Merge branch 'next' of github.com:lotrekagency/camomilla into next ([`a2d5bf9`](https://github.com/camomillacms/camomilla-core/commit/a2d5bf92042a4a9b7f81bfb07438d551a2204070)) ## v6.0.0-beta.1 (2023-07-31) ### Chore * chore: added vuepress doc generation ([`22a51f5`](https://github.com/camomillacms/camomilla-core/commit/22a51f52c72b6a8e678dda7a69921992bdab77e8)) * chore: added typing for abstract page ([`29eea97`](https://github.com/camomillacms/camomilla-core/commit/29eea973e9f448a6a2a68fa425cd6d25ae0b3289)) * chore: update setup.cfg requirements ([`1324d2b`](https://github.com/camomillacms/camomilla-core/commit/1324d2b58dfbf1d99bf33b1fe268b6e0417ba29b)) * chore: update migration 0013 ([`2639b68`](https://github.com/camomillacms/camomilla-core/commit/2639b68520e28f852149bf2af4efef150badcf0f)) ### Documentation * docs: update docs ([`6dcaaf6`](https://github.com/camomillacms/camomilla-core/commit/6dcaaf66d1dea2a89bda421c5928536ece96b9e8)) * docs: update readme ([`92a219d`](https://github.com/camomillacms/camomilla-core/commit/92a219d17e5bc5878d2b21c571f1c58ca77aa072)) ### Feature * feat: added autoptimized storage for media files ([`93e02a1`](https://github.com/camomillacms/camomilla-core/commit/93e02a1c189da6520d80947c53f3ae741523668c)) * feat: added page routerlink to have an exact reverse match of permalinks ([`d50396e`](https://github.com/camomillacms/camomilla-core/commit/d50396e41d22ff11ba66e7c36061f2cd16ac2204)) * feat: translatavle template\_data ([`7d25ef7`](https://github.com/camomillacms/camomilla-core/commit/7d25ef7250375579971530574d91a82f83b4b864)) * feat: added template\_data to abstract page" ([`07bb9a1`](https://github.com/camomillacms/camomilla-core/commit/07bb9a151311ab1917a727b12d5fb21e94609204)) * feat: added camomilla settings to change defatult many behaviours ([`53be09c`](https://github.com/camomillacms/camomilla-core/commit/53be09cc7c265d5f1ab5007b35115a1d4da9f099)) * feat: added page meta inheritance ([`69f93a3`](https://github.com/camomillacms/camomilla-core/commit/69f93a33d34ac998968a1f8887e24342cc99f6f4)) * feat: added the possibility to select menu template to render ([`bd8b05f`](https://github.com/camomillacms/camomilla-core/commit/bd8b05f8e9e0165e723c5d90dbad3d49239f00df)) * feat: added get\_context to page model ([`c9645ef`](https://github.com/camomillacms/camomilla-core/commit/c9645efa722bcb0397b9facb44794a4d52815f32)) * feat: added serializers for structured data ([`325ce53`](https://github.com/camomillacms/camomilla-core/commit/325ce535f32605014ccbd3fe3447674d328ddbd1)) * feat(structured): added cache to StructuredJSONField πŸš€ ([`e3d0d6a`](https://github.com/camomillacms/camomilla-core/commit/e3d0d6aabaf943810d0662090a7a3c6cec1c7fd4)) * feat(structured): added cache for listfields ([`d70f35d`](https://github.com/camomillacms/camomilla-core/commit/d70f35dfbb5e1a7fbf3c27a0ce7e53dec52677b8)) * feat(model\_api.py): created basic register decorator ([`e62bd37`](https://github.com/camomillacms/camomilla-core/commit/e62bd37cc5d0f5d3b4f231f1d8b1a52f1294db09)) * feat: removed migrations and added MIGRATION\_MODULES setting injection ([`5e770f3`](https://github.com/camomillacms/camomilla-core/commit/5e770f3f367f2e404b56c8c5d4469b816218b901)) * feat: added shortcuts to render menus ([`6f23fe9`](https://github.com/camomillacms/camomilla-core/commit/6f23fe9f8cb100a95d5fdbae05ab9af8881a555d)) * feat: added StructuredJSONField descriptor ([`651b134`](https://github.com/camomillacms/camomilla-core/commit/651b134f408885f3746a7a0b782d68f8dbd66c06)) * feat: added StructuredJSONField ([`de3bb6d`](https://github.com/camomillacms/camomilla-core/commit/de3bb6dbf17e7d3bf8dca126d2cbef5664be6f99)) * feat: added dynamic\_pages\_urls and template management ([`1620d0a`](https://github.com/camomillacms/camomilla-core/commit/1620d0a74fe3609c133237bb5fbb8ae2cc116948)) * feat: added class methods to Abstractpage to facilitate camomilla upgrade from old versions ([`4d4b381`](https://github.com/camomillacms/camomilla-core/commit/4d4b381c56bfa16e2123ee08f47c18b6a3a6d3a4)) * feat: added some translations utils ([`7185ae1`](https://github.com/camomillacms/camomilla-core/commit/7185ae17868a7826369790bbbf4f1230bd7f4a5d)) * feat: add djsuperadmin urls if present ([`81ec4e8`](https://github.com/camomillacms/camomilla-core/commit/81ec4e8439649f7dddba8a3088a956a6b2f5c851)) ### Fix * fix: set Content model itentifier unique together with page fk ([`b58d309`](https://github.com/camomillacms/camomilla-core/commit/b58d309cfbea543586a1d20dd40e8cf3608f284d)) * fix: fix current user union query for sqlite ([`47b4879`](https://github.com/camomillacms/camomilla-core/commit/47b48798e4c6bf7b280e16181083453e53035ac7)) * fix: fix sqlite OperationalError ([`3cbe374`](https://github.com/camomillacms/camomilla-core/commit/3cbe3740b58d88149880da7d870c41dd201e139d)) * fix: fixed to\_db\_transform in menu nodes childs ([`9ac1c7c`](https://github.com/camomillacms/camomilla-core/commit/9ac1c7cf111d35b986125d438fcc4568f9dec28d)) * fix(model\_api): get\_queryset in viewset instead of queryset ([`4fd8e4b`](https://github.com/camomillacms/camomilla-core/commit/4fd8e4b54eb06e78d4169cba98605cd503a5b480)) * fix: fix ulrnode match ([`9b6628e`](https://github.com/camomillacms/camomilla-core/commit/9b6628e23754e5091ebd895760f731b96537ea72)) * fix: fix disable i18n ([`a87bb03`](https://github.com/camomillacms/camomilla-core/commit/a87bb036c86c3cf65bd2bb8e473cf7097d0d122a)) * fix: fix some sypos in default html ([`e203f88`](https://github.com/camomillacms/camomilla-core/commit/e203f88a5531cfa14fb790166fb7c20afc571925)) * fix: fix page status check ([`d6363a5`](https://github.com/camomillacms/camomilla-core/commit/d6363a54ecd7bb883e7337ffde352e55fe07805c)) * fix: fix urlnodes permalink generations ([`785b844`](https://github.com/camomillacms/camomilla-core/commit/785b8443b2e0bf572d199c6d05fca167e35a98d3)) * fix: fix dynamic pages ([`878a81e`](https://github.com/camomillacms/camomilla-core/commit/878a81e809bf88f22c6cf4b47a4844a361a72cdd)) * fix: fix annotate default ([`8e155a8`](https://github.com/camomillacms/camomilla-core/commit/8e155a8353edd6dd1e2318cd92217dec83225362)) * fix: fix annotate ([`d199c88`](https://github.com/camomillacms/camomilla-core/commit/d199c88437a327a021c6b0138f5ec834618d4aa9)) * fix: fix setup.cfg ([`621db85`](https://github.com/camomillacms/camomilla-core/commit/621db857f20657b2b9a030283aa323b02280d48a)) * fix: fix media **str** function ([`18335fe`](https://github.com/camomillacms/camomilla-core/commit/18335fef3ac84e77efc649b4e0e493595a6a7428)) * fix: inherit ModelSerializer in AbstractPageMixin to be sure some method exists ([`3d440a2`](https://github.com/camomillacms/camomilla-core/commit/3d440a289b82f1f7c00f9bd364a398193f1f4aaa)) * fix: fix UniquePermalinkValidator skipping validation on nested bases sublclasses ([`b089d67`](https://github.com/camomillacms/camomilla-core/commit/b089d678bc48dad160acd804d449336a695a7df6)) * fix: skip update child on page creation to prevent missing relation checking ([`7f9f0b2`](https://github.com/camomillacms/camomilla-core/commit/7f9f0b2015f38b8f5320587390fa6b3564b2095d)) ### Refactor * refactor: update menu template to use new node structures ([`afcafee`](https://github.com/camomillacms/camomilla-core/commit/afcafeec4a841288f860cb55a3fd0d39a9f2a87c)) * refactor: isolate AbstractPageTranslationOptions to let childs inherit from there ([`a70b41a`](https://github.com/camomillacms/camomilla-core/commit/a70b41a034d0fb03f806c9be85842630835bfd0b)) ### Unknown * Merge branch 'feature/model\_api' into next ([`89d69d9`](https://github.com/camomillacms/camomilla-core/commit/89d69d924d230a6133efa51f9e71c1c31ffba78f)) * deps: added jsonmodels deps ([`8f211e6`](https://github.com/camomillacms/camomilla-core/commit/8f211e688973ff5fdabd1382dff3ae619e795254)) * Merge branch 'feature/structureddata' into next ([`d14883b`](https://github.com/camomillacms/camomilla-core/commit/d14883b2e89ce7ebddf25e9becdeb5b212ad872c)) * Merge branch 'feature/urlnodes' into next ([`68c560c`](https://github.com/camomillacms/camomilla-core/commit/68c560c44d2f1c46bb4e3a249d706cc84e66992d)) * Merge branch 'feature/urlnodes' into next ([`a69393c`](https://github.com/camomillacms/camomilla-core/commit/a69393c0fee0dd754659693d76b16441cc63bf2b)) * Merge branch 'feature/urlnodes' into next ([`1e0693f`](https://github.com/camomillacms/camomilla-core/commit/1e0693fd2d1b562dcfbe032fd158b9bbee1b2ebf)) * Merge branch 'feature/urlnodes' into next ([`04a7aff`](https://github.com/camomillacms/camomilla-core/commit/04a7aff6bf85c143f585225cd56e075f5d2dc72e)) * Merge branch 'feature/urlnodes' into next ([`8559488`](https://github.com/camomillacms/camomilla-core/commit/8559488b8f9acf581775a89189a89727cd54d770)) * Merge branch 'feature/urlnodes' into next ([`d09589a`](https://github.com/camomillacms/camomilla-core/commit/d09589a7aa1e5000d5d64cebea305678b3befad1)) * Merge branch 'master' into next ([`4910f4d`](https://github.com/camomillacms/camomilla-core/commit/4910f4dae50c451ec91196b07e5a7e8e048e2012)) * Merge branch 'master' into next ([`c113785`](https://github.com/camomillacms/camomilla-core/commit/c1137857d78091e16515b90bb2e60c63514180fc)) ## v5.8.5 (2023-03-07) ### Feature * feat: default translate menu nodes ([`a051ae9`](https://github.com/camomillacms/camomilla-core/commit/a051ae97838a5e6a3eca346facb1d1c06969031b)) * feat: added menΓΉ model and serializers ([`cc902ea`](https://github.com/camomillacms/camomilla-core/commit/cc902eab73b198932fe00afd66e3eeb0e48afd79)) * feat: added urlnode autogeneration and slug validator ([`12cd811`](https://github.com/camomillacms/camomilla-core/commit/12cd8111a4f1deefcb65aa346b893930978d1539)) * feat: new urlnode structure for pages ([`2576520`](https://github.com/camomillacms/camomilla-core/commit/2576520cd37f9a7a415da941e5c7260e30f7e410)) * feat: added way back migration helper to return to hvad ([`d8c49ba`](https://github.com/camomillacms/camomilla-core/commit/d8c49baaa74588ec41dd657971d605cdbafd9b3d)) * feat: added serializer for nested translations ([`4c7bae3`](https://github.com/camomillacms/camomilla-core/commit/4c7bae35145bd7791509b4d15904c3ca9376eb2e)) * feat: added migration to move data to new table scheme ([`99d87f0`](https://github.com/camomillacms/camomilla-core/commit/99d87f080dd4ba6f16fe3f0bd74ac166fb927706)) * feat: added a custom migration to maintain data from hvad tables ([`6d997bd`](https://github.com/camomillacms/camomilla-core/commit/6d997bdffc08f4e01895598004ad61f61f98e3f0)) ### Fix * fix(related): nest mixing now is taking depth directly from constructor ([`63c5ae5`](https://github.com/camomillacms/camomilla-core/commit/63c5ae5d1c8444bec8b68afac20e2e57fb3b944e)) * fix(related): fix related serializer trying to set queryset on readonly models ([`bd2eb4f`](https://github.com/camomillacms/camomilla-core/commit/bd2eb4f9ce2eee5d9807ff656acee6e2c1584170)) * fix(media): fix media search scope ([`a729489`](https://github.com/camomillacms/camomilla-core/commit/a729489cdc4c4b443fcbd32f8cafdca29be8534e)) * fix: prevent listing models without an url\_node ([`5811b67`](https://github.com/camomillacms/camomilla-core/commit/5811b67b89e3c9f0c8901547a29de07593118763)) * fix: fix model field naming to grant backward compatibility ([`73cd873`](https://github.com/camomillacms/camomilla-core/commit/73cd873259712e6665ca572f95a3c00d4b298440)) * fix: fix translation update in translation serializer ([`1c372f8`](https://github.com/camomillacms/camomilla-core/commit/1c372f80483ba0c73ca9ca9325bf075c112917fd)) ### Refactor * refactor: unify settings in camomilla.settings ([`2962e23`](https://github.com/camomillacms/camomilla-core/commit/2962e23d991272e1831c3cb80466de235511df01)) * refactor: changed internal imports to absolute path ([`3c7f9f0`](https://github.com/camomillacms/camomilla-core/commit/3c7f9f0ee7f48d1fde89602eff6aed96a3e0bb41)) * refactor: remove all hvad code ([`986b0dc`](https://github.com/camomillacms/camomilla-core/commit/986b0dc0d9fd39ad55ba75b8ac5916025a8ef7ac)) * refactor: removed hvad code from admin.py and added modeltranslations one ([`94b2ebb`](https://github.com/camomillacms/camomilla-core/commit/94b2ebb7bfc56007391a3a1330a7117d4fa81804)) * refactor: registered models in translation.py ([`a36c77f`](https://github.com/camomillacms/camomilla-core/commit/a36c77f04f825f86f6efdde72a8aca3c3410da29)) * refactor: removed hvad code from models and added modeltranslations one ([`219dcf1`](https://github.com/camomillacms/camomilla-core/commit/219dcf1b5e6f2ca61282c2a72c267fce70aea7df)) ### Unknown * deps: drop support for django 2.2 ([`6a75523`](https://github.com/camomillacms/camomilla-core/commit/6a75523b80adae384008f6af572785d1e16c819a)) * deps: remove hvad and add modeltranslations to requirements ([`07c8c7e`](https://github.com/camomillacms/camomilla-core/commit/07c8c7ee0a4ed1aeabd1165d4514762b2daf5b6f)) ## v5.8.4 (2022-12-21) ### Fix * fix: fix jsonPatch mixin for trans jsons ([`e0c9236`](https://github.com/camomillacms/camomilla-core/commit/e0c9236994fa2a776702c83f14db7496fdcc6450)) ## v5.8.3 (2022-12-21) ### Fix * fix: fix potential recursion error in NestMixin and take nesting depth from settings ([`647114c`](https://github.com/camomillacms/camomilla-core/commit/647114c0b32a556773fe657929a9e3d86254b295)) * fix: fix recursive nestmixin functions ([`e83586e`](https://github.com/camomillacms/camomilla-core/commit/e83586eba127e970b714d78b2cb0ff353731d6fc)) ### Unknown * Merge branch 'master' of github.com:lotrekagency/camomilla ([`91fe6c1`](https://github.com/camomillacms/camomilla-core/commit/91fe6c1d9c2c8994964a44a173e86677e0d6910c)) ## v5.8.2 (2022-12-21) ### Fix * fix: fix nested translations mixins ([`2c17ed8`](https://github.com/camomillacms/camomilla-core/commit/2c17ed86d2169df67f2e14b37518e8dc16b6a121)) ## v5.8.1 (2022-12-20) ### Fix * fix: fix potential recursion error in NestMixin ([`f337155`](https://github.com/camomillacms/camomilla-core/commit/f33715549ecb2555eba07ddc2a676e314e48c235)) * fix(media): allow json parser in media for patch requests without files ([`b117229`](https://github.com/camomillacms/camomilla-core/commit/b1172297f22cf032c41efefe6a58b206c34d5e2b)) * fix: show all permissions on profile serializer ([`fb1dc5e`](https://github.com/camomillacms/camomilla-core/commit/fb1dc5ee3e27dec4d382e6a06a60599ab82cff1e)) * fix(media): allow json parser in media for patch requests without files ([`00b1d24`](https://github.com/camomillacms/camomilla-core/commit/00b1d24a0de19c3a4cfb0bbeafba9e48e06c46ce)) ### Unknown * Merge pull request #15 from lotrekagency/hotfix/userpermissions Added all permissions array to user profile ([`15891b1`](https://github.com/camomillacms/camomilla-core/commit/15891b1d52d8d1b493822d902fc0bdffbc921770)) * Merge branch 'hotfix/userpermissions' of github.com:lotrekagency/camomilla into hotfix/userpermissions ([`aba3d89`](https://github.com/camomillacms/camomilla-core/commit/aba3d89b0894da44acf5b6f2bb6cd8de1487fb04)) ## v5.8.0 (2022-12-20) ### Chore * chore: fix black ([`c092aab`](https://github.com/camomillacms/camomilla-core/commit/c092aabed9ca3042f092c4b11d97951bfb6d9afe)) ### Feature * feat(rest\_framework): go down in nested relation with updatable serializers, DEFAULT\_NEST\_DEPTH = 10 ([`d22ea66`](https://github.com/camomillacms/camomilla-core/commit/d22ea664820e8b5843435aaa7c279502888992f0)) * feat: optimize many related field to fetch all existing objects ([`8ba3982`](https://github.com/camomillacms/camomilla-core/commit/8ba39828c3dbf3c16c5cc89c38e69fb939c8a062)) ### Fix * fix: fallback media api translations ([`e279f7a`](https://github.com/camomillacms/camomilla-core/commit/e279f7ad4eec933ddb4f43b85f0498d1fbf3d17b)) * fix: fix patch method overriding json field ([`faf7e4b`](https://github.com/camomillacms/camomilla-core/commit/faf7e4b5586801639d3633e6db37c0d1e95d9d15)) * fix: show all permissions on profile serializer ([`e2a0116`](https://github.com/camomillacms/camomilla-core/commit/e2a011602520945c9835091797d3d7ca508f0f52)) * fix: handle ints in many related fields ([`eb7140a`](https://github.com/camomillacms/camomilla-core/commit/eb7140a03d0b933939fd6b163744420bc8f9cf59)) * fix(serializers): added BaseModelSerializer to default serializers of RelatedFields ([`e9a37b5`](https://github.com/camomillacms/camomilla-core/commit/e9a37b54c0e15acdd7c95ed008b6b5b9722d13c5)) * fix(page): added safe page translation getter in get\_page ([`bea64d7`](https://github.com/camomillacms/camomilla-core/commit/bea64d7890d9713f1d9043902b9dd9cfe30f7ce9)) * fix(db): added trigram extension in migrations ([`bdadea1`](https://github.com/camomillacms/camomilla-core/commit/bdadea19f56bfe1a518f020ec18615e448a3df2d)) ### Unknown * deps: update django hvad dep ([`705f057`](https://github.com/camomillacms/camomilla-core/commit/705f05723b0a61b426c3cda011f7be4a5d028916)) * Merge branch 'hotfix/trigram' ([`cfea914`](https://github.com/camomillacms/camomilla-core/commit/cfea914e9fd44ea0486640db9bcc48594498f50e)) * Merge branch 'master' into hotfix/trigram ([`c899467`](https://github.com/camomillacms/camomilla-core/commit/c89946764ab9439fabcb4bc03d509ab20d57ff93)) ## v5.7.7 (2022-08-12) ### Fix * fix: fix bad typechecking in BaseModelSerializer ([`5063abf`](https://github.com/camomillacms/camomilla-core/commit/5063abfddb47e79cd7ec7b16ce43536021138f55)) ## v5.7.6 (2022-08-12) ### Fix * fix: fix BaseModelSerializer related field injectig serializer kwargs in wrong class ([`a212c2f`](https://github.com/camomillacms/camomilla-core/commit/a212c2fa5fd611fb63899a05026a78ff5f3d4d02)) ## v5.7.5 (2022-08-11) ### Fix * fix: explicit default\_auto\_field in app config to prevent unwanted migrations ([`ec33de8`](https://github.com/camomillacms/camomilla-core/commit/ec33de87be8f7fc7fc466070e8fe20b7e75ef438)) ## v5.7.4 (2022-08-02) ### Chore * chore: update requirements ([`b1cfeeb`](https://github.com/camomillacms/camomilla-core/commit/b1cfeeb8fe284d04be5dd60c404089c17ffd3f28)) ### Fix * fix: added missing migrations ([`e57989e`](https://github.com/camomillacms/camomilla-core/commit/e57989e7174374bdcff19d042956327e12b65fe4)) * fix: fix media migration to be compliant with hvad ([`dc5e83a`](https://github.com/camomillacms/camomilla-core/commit/dc5e83ad0d639024319a49ac00b01f8845fbe9f1)) * fix: fix makefile ([`925a270`](https://github.com/camomillacms/camomilla-core/commit/925a2706f00c2b6ab5cc9055a557192a4bbd8d4a)) * fix: added missing migrations for django 4 ([`8a79998`](https://github.com/camomillacms/camomilla-core/commit/8a79998e39c9555385ab0d9e87f299b0ede2883d)) ### Test * test: fix tests ([`79440a2`](https://github.com/camomillacms/camomilla-core/commit/79440a2352f5fa34c072245049d7ede4d12166e3)) ## v5.7.3 (2022-05-16) ### Chore * chore: flake8 fix ([`f83b38a`](https://github.com/camomillacms/camomilla-core/commit/f83b38a85c36a05f705a80530751b0d4a31ad26b)) * chore: update ci test matrix to test camomilla also on django 3 and 4 ([`226ed58`](https://github.com/camomillacms/camomilla-core/commit/226ed58a3734c918b7aaf3b48a9fed5489cddc0c)) ### Fix * fix: fix Arrayfield import ([`2cfdaca`](https://github.com/camomillacms/camomilla-core/commit/2cfdacacb63d59cea79ae59f0c3d9839efe56088)) * fix: fix jsonfield imports ([`be4b566`](https://github.com/camomillacms/camomilla-core/commit/be4b56622df269ee5d200dc5666536b39e7fe0cc)) ## v5.7.2 (2022-05-13) ### Fix * fix: fix get page to work with new hvad ([`2cd8b89`](https://github.com/camomillacms/camomilla-core/commit/2cd8b8948df44fd82c214835770e92b10a3f5512)) * fix: fix camomilla filter content to work with new hvad ([`0193509`](https://github.com/camomillacms/camomilla-core/commit/019350929c19cccdfedbdfc2b493039484a08400)) * fix: update camomilla template to support new django admin static ([`92afbc0`](https://github.com/camomillacms/camomilla-core/commit/92afbc07a1345cf19ed4a5a83317f7658b008804)) * fix: fix gettext\_lazy import deprecated in django4 ([`626dfe1`](https://github.com/camomillacms/camomilla-core/commit/626dfe16a9fb6457e463ac995eb9d4d809c51e22)) ### Unknown * deps: update djsuperadin dependency ([`8089b1e`](https://github.com/camomillacms/camomilla-core/commit/8089b1e5fa6b90e4712559a9635027d6a908c3c9)) * deps: update lotrek-django-hvad deps and sintax ([`996f6bf`](https://github.com/camomillacms/camomilla-core/commit/996f6bfdd73c4b6ea8ece811a4138ba9cc7f8a00)) * deps: update deps to bring compatibility with django 4 ([`fc7dade`](https://github.com/camomillacms/camomilla-core/commit/fc7dade2f949c363ec8101b4ea484e791f27d52b)) ## v5.7.1 (2022-03-30) ### Chore * chore: black . ([`5539ed2`](https://github.com/camomillacms/camomilla-core/commit/5539ed25d598ed766587e787ff906c9afae93de7)) ### Fix * fix: fix circular import error ([`8b3f6ff`](https://github.com/camomillacms/camomilla-core/commit/8b3f6ff2d7a01a2f138506ef4ad94fe78b691521)) * fix: fix session login urls ([`2688c1a`](https://github.com/camomillacms/camomilla-core/commit/2688c1aae082654bebd84f3bfd8f2b74104fa930)) * fix: fix drf session authentication ([`538e709`](https://github.com/camomillacms/camomilla-core/commit/538e709dcc8fd2799b4063c265687b2e0315c076)) ### Test * test: fix test ([`5f0bee8`](https://github.com/camomillacms/camomilla-core/commit/5f0bee833da4a50d6b35bf279c931dfe47a43411)) ## v5.7.0 (2022-03-14) ### Chore * chore: black . ([`dba13f4`](https://github.com/camomillacms/camomilla-core/commit/dba13f4b89c5c219c6c765e79066c2b210a89cd3)) * chore: black . ([`32789cd`](https://github.com/camomillacms/camomilla-core/commit/32789cd38287ea14df6e6960086439b3037ccb04)) * chore: migrate db with ordering and meta ([`560be53`](https://github.com/camomillacms/camomilla-core/commit/560be537c29c34ddf3a97e7aec4ca4e8f077797c)) ### Feature * feat: added ordering to Articles Categories and Pages ([`8cb6d75`](https://github.com/camomillacms/camomilla-core/commit/8cb6d752e462462c37add877c056827fddb491cc)) * feat: added meta to Articles Categories and Pages ([`f859c37`](https://github.com/camomillacms/camomilla-core/commit/f859c370add3b34c081edccc4925c0cd99064d42)) * feat: meta mixin for models 🦹 ([`88c4b4a`](https://github.com/camomillacms/camomilla-core/commit/88c4b4afbfc042ea024c9f4ab6090ccb5b73b272)) * feat: added ordering mixin for rest framework inspired by django adminsortable2 ([`cb619bc`](https://github.com/camomillacms/camomilla-core/commit/cb619bcb10650174d8e01835fdb9ecf44ece81a7)) ### Fix * fix: fix meta mixin methods ([`7d7e3a8`](https://github.com/camomillacms/camomilla-core/commit/7d7e3a80bda93a5faec92ebe52ed7be28635790d)) * fix: fixed reverse ordering in update\_order endpoint ([`b8ae096`](https://github.com/camomillacms/camomilla-core/commit/b8ae0962bdb75895945b0cc696fb64647e079b31)) * fix: fix pagination ordering without default order field ([`ca07303`](https://github.com/camomillacms/camomilla-core/commit/ca07303c951fe4e6142a8af74ff282d0f90c67c2)) ## v5.6.1 (2022-03-01) ### Fix * fix: fix pagination mixin to provide order filter and search also for unpaginated queries ([`62e8b01`](https://github.com/camomillacms/camomilla-core/commit/62e8b01433aac97a5b70de6197f7bb957e5abf46)) ### Test * test: fix api test after ordering ([`9602ce1`](https://github.com/camomillacms/camomilla-core/commit/9602ce123665b489b3c79f228c30435f71ad01e6)) ## v5.6.0 (2022-02-26) ### Feature * feat: added permission classes to media api ([`558cac2`](https://github.com/camomillacms/camomilla-core/commit/558cac2a2b852dcd76d2ad20ce1ab14b4ccb01b0)) * feat: auto-order pagination mixins ([`125dd71`](https://github.com/camomillacms/camomilla-core/commit/125dd71b05faa6554a9def76bd664b837ca8d8fe)) * feat(serializers): automagically πŸ§™ create nested serializers at runtime avoiding the need of declaring RelatedField classes ([`4748786`](https://github.com/camomillacms/camomilla-core/commit/47487860494b56f5fdbff11b4bcc1790e2f9581a)) ### Fix * fix: fix paginate stack oredering ([`685cf8d`](https://github.com/camomillacms/camomilla-core/commit/685cf8dbca2aae00fd2536ed1e1dca6696e88734)) ## v5.5.2 (2022-02-14) ### Fix * fix: fix djsuperadmin reverse url ([`035d377`](https://github.com/camomillacms/camomilla-core/commit/035d377ef9c4dfc25516103542c0aea28a0445a6)) ### Unknown * Merge branch 'master' of github.com:lotrekagency/camomilla ([`7dfbe03`](https://github.com/camomillacms/camomilla-core/commit/7dfbe03c27ae5f53b4d7c7b6e880bc9899ba66ea)) ## v5.5.1 (2022-02-14) ### Chore * chore: black . ([`a811c72`](https://github.com/camomillacms/camomilla-core/commit/a811c72de2fa37c296215f41dec755405edbf28f)) ### Fix * fix: fix RelatedField allow\_insert condition ([`90ba04f`](https://github.com/camomillacms/camomilla-core/commit/90ba04f2520bf131c95145121362984535f367e2)) * fix: fix serarchfield for article viewset ([`2c9cda4`](https://github.com/camomillacms/camomilla-core/commit/2c9cda4f387bc4bbc5909f7f40ebd484591cb402)) * fix: added missing migration ([`a018f0f`](https://github.com/camomillacms/camomilla-core/commit/a018f0f125e68548492d3fd74a5cd8bddda61293)) * fix: Refactor filefield and fix bad return value ([`1f1a36a`](https://github.com/camomillacms/camomilla-core/commit/1f1a36aaa2fad7e43a348ef2513e1aaabdddaae3)) * fix: fix related field trying to insert new values all the time ([`2465598`](https://github.com/camomillacms/camomilla-core/commit/246559814ef351d2cd010fd6f7385777dd075cf2)) ### Unknown * Merge branch 'master' of github.com:lotrekagency/camomilla ([`0dc22e3`](https://github.com/camomillacms/camomilla-core/commit/0dc22e3b479f8c5b070407c1974dd752ba03d49f)) ## v5.5.0 (2022-02-12) ### Chore * chore: black . ([`920791d`](https://github.com/camomillacms/camomilla-core/commit/920791d79b31a9b603c07c86c6bf1bf450629379)) * chore: black . ([`df1a32a`](https://github.com/camomillacms/camomilla-core/commit/df1a32ab1d7bd9b3441e17d1aa96ac3b82519c01)) ### Feature * feat(api): brand new serializators views and permissions for users endpoint ([`0f5b824`](https://github.com/camomillacms/camomilla-core/commit/0f5b824c0c614d9ec8fbb1ffd04644e3d30e774c)) * feat(api): added trigram search mixin to medias ([`0002c8b`](https://github.com/camomillacms/camomilla-core/commit/0002c8b40a317b3d6bae64c1c12764e31e59cb6c)) ### Fix * fix: fix File fields imports ([`3a0af76`](https://github.com/camomillacms/camomilla-core/commit/3a0af764afefc88336bcb0646e13dc3c9deee609)) * fix: added creation logics for Related fields ([`56f20a5`](https://github.com/camomillacms/camomilla-core/commit/56f20a5df522035ef5bbdca6e8c67bfa40daf274)) * fix: integrate Camomilla fields in Base model serializers ([`3556d33`](https://github.com/camomillacms/camomilla-core/commit/3556d33c7343208b9f7b0e380bb1614c24298169)) * fix: added FileField and ImageField to fix drf Fields ([`7fc3160`](https://github.com/camomillacms/camomilla-core/commit/7fc3160b493cc102ffa1be029e651bc3196266cc)) * fix: article permalink is now slugfield to prevent bad inputs ([`aafd92c`](https://github.com/camomillacms/camomilla-core/commit/aafd92cb518fe5e768ad3fd6f515af0c8599747a)) * fix: fix article serializer missing categories ([`93b4284`](https://github.com/camomillacms/camomilla-core/commit/93b42840980da194dd6b40646d7d5685c7da930a)) ### Unknown * Merge pull request #9 from lotrekagency/hotfix/searchconf Added Trigram search mixin ([`3ff1bd2`](https://github.com/camomillacms/camomilla-core/commit/3ff1bd2f9a6b21733b27ae437a897e0458a6e129)) ## v5.4.2 (2022-01-18) ### Chore * chore: change semantic release conf ([`944d36f`](https://github.com/camomillacms/camomilla-core/commit/944d36f90038f0533bcf08908dddc9baef3e56b8)) ### Fix * fix: fix versioning ([`39b5226`](https://github.com/camomillacms/camomilla-core/commit/39b522637ff79c7ff05237d1ad85e1cae26d2a94)) * fix: added min max range to requirements ([`6841054`](https://github.com/camomillacms/camomilla-core/commit/6841054d71c0704919b446eb8ed542d3fb08a873)) ### Unknown * Merge branch 'master' of github.com:lotrekagency/camomilla ([`f713e25`](https://github.com/camomillacms/camomilla-core/commit/f713e252b5ca129fbce2c14841af026ebdf0f4a1)) ## v5.4.1 (2022-01-17) ### Fix * fix: loosen the range of requirements package versions ([`96d491b`](https://github.com/camomillacms/camomilla-core/commit/96d491b4ff0aba269624eb7a27b1f3cd55946721)) ## v5.4.0 (2022-01-13) ### Chore * chore: black + remove unused imports ([`f6884cc`](https://github.com/camomillacms/camomilla-core/commit/f6884cce0836d5dcf74d204e5523785ddc435a50)) * chore: fix coverage report ([`c009cae`](https://github.com/camomillacms/camomilla-core/commit/c009caed0aef9cc70a10b864238def471eef16be)) ### Feature * feat(media): added mime\_type column to media model ([`4771068`](https://github.com/camomillacms/camomilla-core/commit/4771068d2e54779a3d6e38ee9b447fb04c73539c)) * feat(api): added search to medias ([`905661d`](https://github.com/camomillacms/camomilla-core/commit/905661d874b5ff2e22ea8b508c46d1ccfc70c0e7)) * feat(media): added option to override Media file on update from api to maintain same url ([`8d6371f`](https://github.com/camomillacms/camomilla-core/commit/8d6371ff94e460f2e84efde45882d7d192b7cce6)) ### Fix * fix(media): added opetation to db migration to recalc old media with the new mime\_type feature ([`a7afd2d`](https://github.com/camomillacms/camomilla-core/commit/a7afd2d53ba2b2f27d0d06fb6dba131368fdcc6e)) * fix(media): mime filter parsing works also in folder viewset ([`4149e92`](https://github.com/camomillacms/camomilla-core/commit/4149e92e6c67e5f96219f02859a3aaa3f748553d)) ### Unknown * Merge pull request #6 from lotrekagency/feature/media Added mime type and search to Medias ([`39767ec`](https://github.com/camomillacms/camomilla-core/commit/39767ec9057ecd549ea8936738f2749d8beb7389)) ## v5.3.0 (2021-12-17) ### Chore * chore: fix ci/cd ([`682f200`](https://github.com/camomillacms/camomilla-core/commit/682f20025f2053dd644a0a3b83ee91c6f6d0116a)) * chore: fix ci/cd ([`0a6daf4`](https://github.com/camomillacms/camomilla-core/commit/0a6daf455a55372ea93e3bf728213d3843a8cd25)) * chore: update readme ([`a75daee`](https://github.com/camomillacms/camomilla-core/commit/a75daeef290337f423a4fc27b0efd942aca8bde6)) * chore: update readme ([`6bde3c8`](https://github.com/camomillacms/camomilla-core/commit/6bde3c85a2678e88176a60ff7182e7210a42d29c)) * chore: update ci job names ([`991280c`](https://github.com/camomillacms/camomilla-core/commit/991280cdff420462f65267c28003e55314fae728)) ### Feature * feat(api): handle multisort on PaginateStackMixin ([`40080f4`](https://github.com/camomillacms/camomilla-core/commit/40080f4542c8e0dd4c8b36bb5cf5de6e078c3314)) ### Unknown * Merge pull request #5 from lotrekagency/feature/multiplesort Handle multisort on PaginateStackMixin ([`33616c7`](https://github.com/camomillacms/camomilla-core/commit/33616c74ebc908d2f0ef7bc2fd98e2d3a3da5cfc)) ## v5.1.0 (2021-12-17) ### Chore * chore: added release to ci ([`bb99d98`](https://github.com/camomillacms/camomilla-core/commit/bb99d984b22128e78597c481128719ab36567faf)) * chore: removed django 3 compatibility ([`f9420c5`](https://github.com/camomillacms/camomilla-core/commit/f9420c50aa3e3b8a6f6339ae61de343d7fae4ef9)) * chore: update ci ([`08dadb3`](https://github.com/camomillacms/camomilla-core/commit/08dadb3f78ff27aecef4215ed085d54a8dc85155)) * chore: update ci ([`765e5b5`](https://github.com/camomillacms/camomilla-core/commit/765e5b527d0e4733626b2038a2fa08c26b54fc8f)) * chore: update ci ([`9536ded`](https://github.com/camomillacms/camomilla-core/commit/9536ded0819cb3c364e915efe0189ed1cf49c2f2)) * chore: update ci ([`c38c634`](https://github.com/camomillacms/camomilla-core/commit/c38c6347725f887efcb634320d9026bc9d934f85)) * chore: fix ci ([`9701dc1`](https://github.com/camomillacms/camomilla-core/commit/9701dc1b4d4794bc512429a9c56307ee3473a3ed)) * chore: update ci ([`723f8f3`](https://github.com/camomillacms/camomilla-core/commit/723f8f3d296784c5ab85c596abbbe007731fd060)) * chore: update ci ([`b08a52a`](https://github.com/camomillacms/camomilla-core/commit/b08a52a983ac011f94f40d50d22a91616743bbd5)) * chore: add flake8 settings ([`381b560`](https://github.com/camomillacms/camomilla-core/commit/381b5608b91fb17df4386722c1d1375f9ba7f04b)) * chore: fix flake8 errors ([`440d214`](https://github.com/camomillacms/camomilla-core/commit/440d21463ff7e70617e538d5c3fbc2814798c5dd)) * chore: update ci.yml ([`3a21126`](https://github.com/camomillacms/camomilla-core/commit/3a21126c60cea44e41fc1ce5ceb1ceeaf763e083)) * chore: add ci tests ([`1924786`](https://github.com/camomillacms/camomilla-core/commit/1924786413180679f9c59c2d53798b5c0258976d)) ### Feature * feat: added image properties into media model ([`09cb481`](https://github.com/camomillacms/camomilla-core/commit/09cb4818b2e3207eab7a12361f5e273b17edd1d0)) * feat: option to remove pagination on views ([`3e6fc48`](https://github.com/camomillacms/camomilla-core/commit/3e6fc489db8b01f488ffebedd93f614c01d9e8d3)) ### Fix * fix: fix sqlite compatibility problems ([`4cde4fc`](https://github.com/camomillacms/camomilla-core/commit/4cde4fc6c5f0e0b0d76e2020943de6d0bc973a49)) * fix: fix app name ([`13bb12d`](https://github.com/camomillacms/camomilla-core/commit/13bb12d75bc9072a9ff150a7b408157f022c9299)) * fix: added search field to article viewset ([`1bd4b5f`](https://github.com/camomillacms/camomilla-core/commit/1bd4b5f0681885b19bb2043d7622c8b3e77b9689)) * fix: fix articles and pages serializers requiring RelatedField fields. ([`c4fd330`](https://github.com/camomillacms/camomilla-core/commit/c4fd330fb06dc3d49de4100865376a9eedb3f6f6)) ### Test * test: fix test conf ([`140b658`](https://github.com/camomillacms/camomilla-core/commit/140b658dcd829c65ae126eb4c8ce886f3d098543)) * test: add psycopg2 to dev-requirements ([`2d9004a`](https://github.com/camomillacms/camomilla-core/commit/2d9004af770dec2db15f48e9dee7ea203309e84e)) * test: update flake8 ([`0f9ed23`](https://github.com/camomillacms/camomilla-core/commit/0f9ed23297cdb812e43c99b023b7a7810ab7e3ec)) * test: fix testing ([`31e2077`](https://github.com/camomillacms/camomilla-core/commit/31e2077c024056158a06454c53a9035e9db437a2)) ### Unknown * Merge branch 'master' of github.com:lotrekagency/camomilla ([`296623a`](https://github.com/camomillacms/camomilla-core/commit/296623a161d056b7539de08d2a2f06d8cebddd57)) * Merge pull request #3 from lotrekagency/hotfix/search\_field Add search field to article viewset ([`b8a9888`](https://github.com/camomillacms/camomilla-core/commit/b8a988865cb048917eadb68ba8a843cb058264bc)) * Merge pull request #4 from lotrekagency/feature/image\_properties Add image properties to Media model ([`b4677c5`](https://github.com/camomillacms/camomilla-core/commit/b4677c52dbcd0d1b32072cdaafe57cf3f0aa50a0)) * Merge pull request #2 from lotrekagency/hotfix/no\_pages Added option to disable pagination on views ([`2e32c18`](https://github.com/camomillacms/camomilla-core/commit/2e32c1899d86278d8c3531ab156ca1dee3549fd4)) ## v5.0.3 (2021-10-26) ### Chore * chore: Move package version to **init**.py ([`e17c97a`](https://github.com/camomillacms/camomilla-core/commit/e17c97af18d0453da4fd959d69ab5d3d567a26a4)) * chore: Replace git packages dependencies with pypi packages ([`1b0672e`](https://github.com/camomillacms/camomilla-core/commit/1b0672ec66b1624fd7923a8f25710b1e81835c10)) * chore: Use semantic versioning for package publishing pipe ([`35b9933`](https://github.com/camomillacms/camomilla-core/commit/35b9933f8b027dee42e1089e6d5bdc5f80fc6721)) ### Unknown * Merge branch 'master' of github.com:lotrekagency/camomilla ([`3b40fd5`](https://github.com/camomillacms/camomilla-core/commit/3b40fd5a4a649ed33163950ebab225bd20529d45)) * added MIT license ([`2c517c5`](https://github.com/camomillacms/camomilla-core/commit/2c517c57d60f7de8cf53aee16c5ad98ceb17b888)) * Merge pull request #1 from lotrekagency/hotfix/pagination Fix some pagination issues ([`e892d08`](https://github.com/camomillacms/camomilla-core/commit/e892d08fb22faa43f37da45a7f28e3b06942943c)) * change pages range to pages count ([`a1185dc`](https://github.com/camomillacms/camomilla-core/commit/a1185dc2ab242ab370bf7738b94728fe92f9eed3)) * fix searchvector arguments ([`ddc7353`](https://github.com/camomillacms/camomilla-core/commit/ddc7353abbca5a8a60342c35b219b23f1a2106e8)) * added mediaListSerializer to decrease db stress on list call ([`1ee30d6`](https://github.com/camomillacms/camomilla-core/commit/1ee30d62f3216a071d7509e6760dc05851a0ecb6)) * little refactor of serializers and views to centralize controls of mixins ([`fdfea21`](https://github.com/camomillacms/camomilla-core/commit/fdfea21ebd26e19840f736d57fb5a862373cc7db)) * fix multipart parser ([`76e7549`](https://github.com/camomillacms/camomilla-core/commit/76e754917b05742f4255a01f4f04b853cd1e86d6)) * new logic for multipart parser, added array path indexing ([`fbf88b2`](https://github.com/camomillacms/camomilla-core/commit/fbf88b2b186fc6f0b1f1eba6ccd663bb106a791e)) * Merge branch 'feature/camomillareloaded' ([`ec89be9`](https://github.com/camomillacms/camomilla-core/commit/ec89be96c865bfa7dad98558a9d49324ab0dcf2a)) * add migration ([`65db750`](https://github.com/camomillacms/camomilla-core/commit/65db750590f85f6aec399df1757821b026dd8b38)) * removed some default confs ([`5d52e4e`](https://github.com/camomillacms/camomilla-core/commit/5d52e4eb3d050bd16dfb5c5494a0552ee41841a9)) * removed jwt' ([`d0f2d47`](https://github.com/camomillacms/camomilla-core/commit/d0f2d476772b6f56c48e758e28fc6a401511f828)) * wip on serializers and views ([`5e982a4`](https://github.com/camomillacms/camomilla-core/commit/5e982a4adc6229c51fdb9ef691ea6e8ca4269e66)) * wip on trans helpers ([`3dda877`](https://github.com/camomillacms/camomilla-core/commit/3dda877f839d9e7d50310082600892f95e2b2f01)) * removed ExpandedArticleSerializer ([`c433647`](https://github.com/camomillacms/camomilla-core/commit/c43364761b5ff4cdbeac910e1dde50310c55682a)) * remove trash mixins ([`cc0c4f2`](https://github.com/camomillacms/camomilla-core/commit/cc0c4f27a12a3e4f5ee609d37f6f0beb824073cb)) * better translation initializaion ([`36c2e80`](https://github.com/camomillacms/camomilla-core/commit/36c2e8036bdc7e6ec27b726799332470897661c2)) * fix related field choices visualizations drf ([`88669db`](https://github.com/camomillacms/camomilla-core/commit/88669db06beb6a013360a04bc0e914e45a9c2923)) * refactorized serializers ([`f0105a3`](https://github.com/camomillacms/camomilla-core/commit/f0105a38ee7f5d1c49f68c657f08bdab26ab5d04)) * ArticleView rewrite ([`f83f07f`](https://github.com/camomillacms/camomilla-core/commit/f83f07f89cf5ff43c5c6e61f2833e2e968f6fe86)) * added RelatedField serializer ([`6acead6`](https://github.com/camomillacms/camomilla-core/commit/6acead6019ee6941c15fbc37e6338c029071322a)) * conditional pagination ([`c44ba0c`](https://github.com/camomillacms/camomilla-core/commit/c44ba0cf991d3e40400ed91c549c77b1e1cfc20b)) * Fixed parser for media update ([`1941029`](https://github.com/camomillacms/camomilla-core/commit/19410296b6417d29115eae160a7134df2d0c08b7)) * remove pagination from folders ([`6aea267`](https://github.com/camomillacms/camomilla-core/commit/6aea26747f3dfc654ee73dbf9c3ab0d1d2f80fc3)) * added pagination and some upgrade to media models ([`2896e4b`](https://github.com/camomillacms/camomilla-core/commit/2896e4b3c8ba76e2c18a26672eacafa98b4774dd)) * big refactor code structure ([`9cd06c5`](https://github.com/camomillacms/camomilla-core/commit/9cd06c5043e3179d5f73e7b416a4a86450b3ab2e)) * added token api endpoint and permissions to user serializer ([`a798c6a`](https://github.com/camomillacms/camomilla-core/commit/a798c6a4fb85b398182f0f8e60ee1ad56eb84023)) * Added context in MediaFolderViewset for MediaSerializer ([`aaf8b86`](https://github.com/camomillacms/camomilla-core/commit/aaf8b861289b548c96da013569f94ea95bd1c363)) * Added context to MediaDetailSerializer ([`52b815a`](https://github.com/camomillacms/camomilla-core/commit/52b815abf7e3ba767692b14e1be8b22193190c1e)) * addded try block to make\_thumbnails Media ([`e7e44db`](https://github.com/camomillacms/camomilla-core/commit/e7e44db57d1cdf4da931f1b671aa62794a400ece)) * wix wrong slugify import ([`d031ab4`](https://github.com/camomillacms/camomilla-core/commit/d031ab489ba99d565e6a3eaf4c1e816fa9c94f18)) * fix slugmixin missing slugify dependency ([`124e054`](https://github.com/camomillacms/camomilla-core/commit/124e05452fc7e477a52819d370f065b3a791dd5b)) * Fix models ([`7e9ce16`](https://github.com/camomillacms/camomilla-core/commit/7e9ce16bbbc8ace126a32682123dcd5aa87c9c26)) * Remove useless print ([`37e2432`](https://github.com/camomillacms/camomilla-core/commit/37e24327cd53c34c2a32f9c226b4e69004924298)) * Autogenerate identifier for articles ([`0124b1b`](https://github.com/camomillacms/camomilla-core/commit/0124b1b9a1fcc14df72bf0433e6aeecc3feec899)) * More tests ([`4be200b`](https://github.com/camomillacms/camomilla-core/commit/4be200b3d7096bfecf8011dcac2ae3b4892f2bdb)) * Update requirements.txt with Pillow 6.2.0 ([`211a4c4`](https://github.com/camomillacms/camomilla-core/commit/211a4c42fe9f2b3984f6e0a403e4fc3bd3e5dbd0)) * Update Pillow ([`dac2fc7`](https://github.com/camomillacms/camomilla-core/commit/dac2fc70aefb4b7d0380147a1e9b3edce123eda3)) * Fix filters ([`88a1bb6`](https://github.com/camomillacms/camomilla-core/commit/88a1bb6c90ec20e2cb5d2359f23b588ce0a9afba)) * Update dependencies ([`a9c7264`](https://github.com/camomillacms/camomilla-core/commit/a9c72647ddc14bdf0190804ec8169639d5cc885c)) * Remove some useless code and add api tests ([`f26ae1a`](https://github.com/camomillacms/camomilla-core/commit/f26ae1a192c76629c4d941c58298175f1807e363)) * Move tests outside lib folder ([`075292c`](https://github.com/camomillacms/camomilla-core/commit/075292cac5cba987aa0b92cd8d578012a388548c)) * Restore with new django-hvad ([`b6b6dae`](https://github.com/camomillacms/camomilla-core/commit/b6b6dae5666f5f5431581fe3b3a9b939bc3c2d56)) * First part of tests ([`553be4b`](https://github.com/camomillacms/camomilla-core/commit/553be4b444b5c6599510c1b0a56185eebfa1c198)) * Make JWT token valid for 300 days ([`aca3494`](https://github.com/camomillacms/camomilla-core/commit/aca34943c564c8632edb1453b61401088ff81b07)) * Add djsuperadmin ([`499286b`](https://github.com/camomillacms/camomilla-core/commit/499286b849d237ca248fb25bb567d5cf04006a70)) * Switch to djangohvad 2 ([`0cd9ed3`](https://github.com/camomillacms/camomilla-core/commit/0cd9ed370e90bf438df2098b24d9422dda8c2538)) * Road to 5 ([`c833790`](https://github.com/camomillacms/camomilla-core/commit/c833790fe85d3581505afacfe6ed150b25843280)) * Fix DEFAULTS ([`a04f8a1`](https://github.com/camomillacms/camomilla-core/commit/a04f8a1bc60a08dfe8772c90cfa8f62864ba51a7)) * Move middlewares to DjLotrek ([`bf86d9a`](https://github.com/camomillacms/camomilla-core/commit/bf86d9a1134116529454099015e87a19f31292cd)) * Add utility to get content or redirect to the correct language ([`ba303be`](https://github.com/camomillacms/camomilla-core/commit/ba303be4c89a603376e6aa861dfcce42e8fb7ccd)) * Add compatibility with Bossanova Angular 8 ([`2c24bc4`](https://github.com/camomillacms/camomilla-core/commit/2c24bc4db8bd8275656238bd85f234ebde18966b)) * Add ckeditor for django ([`3f2c4f2`](https://github.com/camomillacms/camomilla-core/commit/3f2c4f252c88af788601dd806b52055a5dfb3b6c)) * Fix dependency link ([`f196440`](https://github.com/camomillacms/camomilla-core/commit/f196440b586d4fba4b4c101058fc654661774650)) * Fix dependency link ([`40c824a`](https://github.com/camomillacms/camomilla-core/commit/40c824a5dbedcbb8297fe2d470be7f51a171541f)) * Fix dependency link ([`e35ba4f`](https://github.com/camomillacms/camomilla-core/commit/e35ba4f7694cfe94f463ba518cd9262fc8531ce1)) * Fix setup.py ([`02f423e`](https://github.com/camomillacms/camomilla-core/commit/02f423ed15a2d989cd4277520cd6c504ff5ab229)) * Fix dependency link ([`c21edba`](https://github.com/camomillacms/camomilla-core/commit/c21edba6217e39941620a17270e92a4079a9399c)) * Fix dependency link ([`87f74b7`](https://github.com/camomillacms/camomilla-core/commit/87f74b7866cb0f4f56acf48f2671007a5399212a)) * Fix dependency link ([`391adf1`](https://github.com/camomillacms/camomilla-core/commit/391adf198a9ecd3db6d8842d8bf8092acaa0a400)) * Fix dependency link ([`664208c`](https://github.com/camomillacms/camomilla-core/commit/664208c03f85f4b3168c546d131abb01909ee859)) * Remove dependency link ([`ec45bf9`](https://github.com/camomillacms/camomilla-core/commit/ec45bf971317293757befafe9b7339e2ab37a7d5)) * Fix setup.py ([`8eff9af`](https://github.com/camomillacms/camomilla-core/commit/8eff9afb1ab263cf7414ce1459e2a95b11270823)) * Add hvad dependency link ([`2495a2f`](https://github.com/camomillacms/camomilla-core/commit/2495a2f4c63a0866cf741ef47b750683a537b7dc)) * Remove useless stuff ([`87c0ccb`](https://github.com/camomillacms/camomilla-core/commit/87c0ccb287e1af6d6132e89ac9be20205eb548b3)) * Update README ([`377af1a`](https://github.com/camomillacms/camomilla-core/commit/377af1ab4cf734ffcf5b6e5b29895a8a69681894)) * Update libraries ([`79fbf0e`](https://github.com/camomillacms/camomilla-core/commit/79fbf0e580ee72e7b6c1719e6ee6a95ba280c404)) * Update libraries ([`ced0916`](https://github.com/camomillacms/camomilla-core/commit/ced0916a43275abba805f6e385d4191be36ef035)) * New Camomilla 5 ([`42d52df`](https://github.com/camomillacms/camomilla-core/commit/42d52df670cd2acd3d60f2f8a77f17e00eca31da)) * Fix 0023\_articletranslation\_content\_title for any database ([`4a7ef6e`](https://github.com/camomillacms/camomilla-core/commit/4a7ef6e3983e0e3a2a724b7bbb7f79934b7ecacd)) * try to save og image from migrations ([`b2a3c54`](https://github.com/camomillacms/camomilla-core/commit/b2a3c548b774101c8886c36ada7f7c9acd7bc3ac)) * added sqlparse to requirements due to migration fix ([`ea0d5d2`](https://github.com/camomillacms/camomilla-core/commit/ea0d5d24e79fd7c0444f45e9ef61846a70bd14ec)) * fix bad migration ([`78f52bd`](https://github.com/camomillacms/camomilla-core/commit/78f52bd218626dbb5f2f9317439a5d2df02e1b45)) ## v4.0.0 (2018-12-31) ### Unknown * Versio 4.0.0 ([`fa534b4`](https://github.com/camomillacms/camomilla-core/commit/fa534b4eb83f3ae1e9248db4613015d376d21b03)) * Ignore dist files ([`5802a73`](https://github.com/camomillacms/camomilla-core/commit/5802a73815cbd20d08a00aa3cc654734a0edd2ee)) * Remove egg info ([`3075ba9`](https://github.com/camomillacms/camomilla-core/commit/3075ba92e0c3790d0fdd118cf844868eab7341b6)) * New package for Camomilla ([`08e115b`](https://github.com/camomillacms/camomilla-core/commit/08e115bf16bc7d82733384fe6a752ebabbcf75cd)) * Merge branch 'newbossanova' into 'master' Newbossanova See merge request lotrekdevteam/camomilla/camomilla!12 ([`b108ae9`](https://github.com/camomillacms/camomilla-core/commit/b108ae952c4ddcd9d97d03bf0dac356424735806)) * fix bulk delete trashmixin api ([`66ce1f5`](https://github.com/camomillacms/camomilla-core/commit/66ce1f5e6bec122c8cc53d67b431aef7ca1040b4)) * fix solutions in product page ([`994307a`](https://github.com/camomillacms/camomilla-core/commit/994307ae4a9dd7b9fc90a07ad79a98509bcb2d3d)) * fix camomilla content api ([`21aa7f6`](https://github.com/camomillacms/camomilla-core/commit/21aa7f6744bcbc02828d79efb3f7a27409aa700e)) * trash bin support ([`eae164d`](https://github.com/camomillacms/camomilla-core/commit/eae164d3331db96686f3c989913956bd8308bbd7)) * update get\_seo to use seomixin models ([`2a6b893`](https://github.com/camomillacms/camomilla-core/commit/2a6b893eae42df948208897b244193be154802f8)) * clean parser util ([`416057b`](https://github.com/camomillacms/camomilla-core/commit/416057b37ad1c34127fddf4afdcb9f55bf0a5983)) * Translations mixins, parsing of multpart and media upload fix ([`db41a7d`](https://github.com/camomillacms/camomilla-core/commit/db41a7d820927457e451116b1b651e9cfec0fc94)) * implement bulk delete ([`314affb`](https://github.com/camomillacms/camomilla-core/commit/314affb01af92bec4fd096ba729dddbe61a3c666)) * fix get\_seo with fallbacks ([`dcf76f2`](https://github.com/camomillacms/camomilla-core/commit/dcf76f2198436ea9476e0db606a0b5537c25eb43)) * added get\_or\_create to get\_seo ([`b6cc631`](https://github.com/camomillacms/camomilla-core/commit/b6cc631d2e434ad23fd9954a30917961eb7fdee7)) * refactor language management and add translated languages check ([`ee51590`](https://github.com/camomillacms/camomilla-core/commit/ee515907abce97a302b7b69c783da65156e4e81d)) * remove patch from media api ([`d142f26`](https://github.com/camomillacms/camomilla-core/commit/d142f2676186503769f40a7c42ed80ee112dd8c5)) * try fix cors ([`d7539f2`](https://github.com/camomillacms/camomilla-core/commit/d7539f2eb8891b7e58a4d2820464a3038ce185f1)) * add field in api to see models related to some media ([`97ccbdf`](https://github.com/camomillacms/camomilla-core/commit/97ccbdf5a192c3ed600c191e04c0fdcbc3b7ace1)) * disable partial update of media ([`1065045`](https://github.com/camomillacms/camomilla-core/commit/10650454e11bdec8938bceaaa9d8828ed70c16c7)) * article lockup for api is now id ([`4c1db1f`](https://github.com/camomillacms/camomilla-core/commit/4c1db1f1ece2825dac9b7c19229b091bdc41b036)) * fix a view and forgotten migration ([`756aa05`](https://github.com/camomillacms/camomilla-core/commit/756aa05f42a5bc555acf91a37f9714008d21d64f)) * get translate content in pages ([`d198a79`](https://github.com/camomillacms/camomilla-core/commit/d198a79ece69fdc5030ffdb4869138ac52ad4bcc)) * add planned choice to articles ([`fa58b3d`](https://github.com/camomillacms/camomilla-core/commit/fa58b3d691452d00a6283af7572978b35d42abef)) * added article title not seo ([`34cf1dc`](https://github.com/camomillacms/camomilla-core/commit/34cf1dcf5613d874cf2b95672136cbf5def05373)) * og\_image is now a media field but we lose old images ([`72f170e`](https://github.com/camomillacms/camomilla-core/commit/72f170ee638f50dcd1679889c77fcd6b22219f04)) * wip ([`0b027b1`](https://github.com/camomillacms/camomilla-core/commit/0b027b1735ad784c657443f3d1ad5551897d9135)) * better queryset selector for language ([`9615552`](https://github.com/camomillacms/camomilla-core/commit/961555240cd0358076acfb4848b2e04804c2aaa8)) * remove validator and leave integrity error ([`f84de8a`](https://github.com/camomillacms/camomilla-core/commit/f84de8a4f4065987f3d626e30e618111be5878b5)) * fix language api ([`1c205f4`](https://github.com/camomillacms/camomilla-core/commit/1c205f489dbc8263805c2629528d2c8dba9d796f)) * article language fallback queriset wip ([`e10a18c`](https://github.com/camomillacms/camomilla-core/commit/e10a18c8fd5d71eb79f8a7fd0386e0617ef9f808)) * fix unique together validation ([`9cc8ae8`](https://github.com/camomillacms/camomilla-core/commit/9cc8ae885bf5009c78a6197ec62bab9705ddd3ea)) * fix operations for sortedm2m and mediasortedm2m ([`d65fb16`](https://github.com/camomillacms/camomilla-core/commit/d65fb163db318ca4c8c1d57f5b3c2e6e7b9e77b4)) * fix error in sortedm2m and mediasortedm2m uploading files ([`eb5a596`](https://github.com/camomillacms/camomilla-core/commit/eb5a5964055a4b41b207dc76ea7f8abb6b146d82)) * Fix tuple error ([`0c8c23f`](https://github.com/camomillacms/camomilla-core/commit/0c8c23f40201a5d325ad5e88897cc6482c3ddb50)) * New awesome feature for micro-services ([`7bdf325`](https://github.com/camomillacms/camomilla-core/commit/7bdf325552aaaaa87af5eb9b364b7a83b036a7f4)) * Get or create ([`fa106da`](https://github.com/camomillacms/camomilla-core/commit/fa106dacbdee3c2f495e7c82b29243a54190a87b)) * Hello new base serializer πŸŽ…πŸ» ([`822aee0`](https://github.com/camomillacms/camomilla-core/commit/822aee03f2a08e44003a4cd19949ab8c09220ace)) * add user image on user serializer ([`c0fdaeb`](https://github.com/camomillacms/camomilla-core/commit/c0fdaeb9a4b66c2b2fca15e3544605c8356d4a5a)) * added api for current user ([`b720d2e`](https://github.com/camomillacms/camomilla-core/commit/b720d2e99f0f461ae151d34c33bf7fdbdafd2ede)) * No more author in Contents ([`50471c8`](https://github.com/camomillacms/camomilla-core/commit/50471c823a83adb65446ad4957923c6f2e03a55a)) * Fixes on serializers ([`c1389d1`](https://github.com/camomillacms/camomilla-core/commit/c1389d1259de746bc02b0f48b422dcc4f34682af)) * Fix migrations ([`f120a96`](https://github.com/camomillacms/camomilla-core/commit/f120a9699395cfe5bd4c0861f531424f244bc425)) * Media folder migrations ([`7c8b7db`](https://github.com/camomillacms/camomilla-core/commit/7c8b7dbd3e5c86363b101c44eb183e0c3b2dd4b7)) * Page on Admin.py ([`ba907f2`](https://github.com/camomillacms/camomilla-core/commit/ba907f218277177a792c1c7066220a6ab0ea557d)) * Media folders endpoint ([`fe619a0`](https://github.com/camomillacms/camomilla-core/commit/fe619a0710aec9f55cda428d89489672407d9776)) * Og description is now a text field ([`1955503`](https://github.com/camomillacms/camomilla-core/commit/19555038ba50b31b67ca1386dbdab71cb25841ba)) * Ignore mo ([`145075f`](https://github.com/camomillacms/camomilla-core/commit/145075f75f7daea032b9598ef31cedba2a98312c)) * Minfixes on serializers ([`2a7f111`](https://github.com/camomillacms/camomilla-core/commit/2a7f11132c521e91ddde035bc87e2b0daea4bfee)) * Refactoring on Article ([`6c9b400`](https://github.com/camomillacms/camomilla-core/commit/6c9b400a445e4444ac74f0f6189aa4bbd479c3fa)) * SitemapUrl is now (finally) Page ([`e8ebaa5`](https://github.com/camomillacms/camomilla-core/commit/e8ebaa541817a0eb711ecb009dd0b6cf6fd9a3b9)) * Fix cache middleware ([`d5f401b`](https://github.com/camomillacms/camomilla-core/commit/d5f401b0e9ff6424223fbd8eb0409bbbac2911ea)) * Update hvad ([`8c1b5d7`](https://github.com/camomillacms/camomilla-core/commit/8c1b5d7fc3d71dfc21bf057bceff6a429e2dc8a7)) * Better filter for contents ([`71924c0`](https://github.com/camomillacms/camomilla-core/commit/71924c0efdba8a524723833fa07b7fdee17efc6f)) * Add templatetags ([`fb857fa`](https://github.com/camomillacms/camomilla-core/commit/fb857fa33efb62d8271b07ca20dce6e49e86bd98)) * Add date to show ([`db007e8`](https://github.com/camomillacms/camomilla-core/commit/db007e8e81ea5fd4cf42b5dd254f067bfbc9514d)) * Better cache management ([`7bba434`](https://github.com/camomillacms/camomilla-core/commit/7bba434eeb1552cf408655be7bc09a1801ad6d5f)) * Minfix on SEO utils now permalink is always request.path ([`ab4e2d5`](https://github.com/camomillacms/camomilla-core/commit/ab4e2d5a0e13a9f8b93508cb1fc5adb231e6563f)) * Fix thumb\_url assignment ([`672d633`](https://github.com/camomillacms/camomilla-core/commit/672d6335cee193bfd8c9cd97b792acdd732c021e)) * Remove useless migration ([`a99bc50`](https://github.com/camomillacms/camomilla-core/commit/a99bc50577be4bbf3ba8ab83c0219f14169e44e9)) * Add remaining migration ([`38523d8`](https://github.com/camomillacms/camomilla-core/commit/38523d8319045d63e19d1ee18aa68f8cd1d597ac)) * align ([`e1005a3`](https://github.com/camomillacms/camomilla-core/commit/e1005a32dd61d5b228c00fab2b633e59bc458d89)) * Useless migration ([`b38d7c3`](https://github.com/camomillacms/camomilla-core/commit/b38d7c3855c75bf942f2846ab97ef6f37f682074)) * Do not use default url prefix ([`7240792`](https://github.com/camomillacms/camomilla-core/commit/72407928b38942771cc2f12bc9142694bcbb2dff)) * update labels ([`ce15ed4`](https://github.com/camomillacms/camomilla-core/commit/ce15ed432f371b751223c210bff500c0cd03e857)) * Remove files on media delete ([`ce6cb48`](https://github.com/camomillacms/camomilla-core/commit/ce6cb480fce9afa5c6707c4545a434aacdadc51c)) * Save optimized images ([`4ed9466`](https://github.com/camomillacms/camomilla-core/commit/4ed94667829c8c30ed7d0719db806f66f2412fcd)) * Generate thumbnail on post save ([`d6847cc`](https://github.com/camomillacms/camomilla-core/commit/d6847cc4f3e397db596d4ed2385fa9575f6aed8c)) * Generate thumbnail on post save ([`ae773d0`](https://github.com/camomillacms/camomilla-core/commit/ae773d06909d6b9a066a08cfb053154d606abd6c)) * Async optimization ([`7743a79`](https://github.com/camomillacms/camomilla-core/commit/7743a79cc94849b9fa678db9ded020df95e805c2)) * Use media root ([`e39f6f3`](https://github.com/camomillacms/camomilla-core/commit/e39f6f3b77211a58d916b1864ba4beaf919f97d0)) * Optimize on save ([`731ef8d`](https://github.com/camomillacms/camomilla-core/commit/731ef8d621733857e41cd47fc43a39c06d1ee43d)) * Add media optimization ([`e480526`](https://github.com/camomillacms/camomilla-core/commit/e480526f5c0453d97938b305f6ace1ac0bfb5d1d)) * Fix regeneration thumbnails ([`142846f`](https://github.com/camomillacms/camomilla-core/commit/142846f1caa4b84a56aef59a2377ceb12bc5f892)) * Remove print ([`de4524f`](https://github.com/camomillacms/camomilla-core/commit/de4524ff5382f55f8fd3c97a886cab9a7a80e45d)) * Improvements on thumbnail generation ([`9bb823f`](https://github.com/camomillacms/camomilla-core/commit/9bb823f559f95769f1f1edc8b013cc271ef7abb5)) * Og\_image in sitemap serializer Media objects are now ordered by 'create' datefield ([`b739fa2`](https://github.com/camomillacms/camomilla-core/commit/b739fa265a3ab4b6fd7b6b3d259a5f7b81d68c6f)) * Merge branch 'master' of bitbucket.org:lotrek-tea/camomilla ([`52f4c00`](https://github.com/camomillacms/camomilla-core/commit/52f4c00125c2df60aa3e4c920a7f32d22018d8f2)) * Description is now on compactSerializers ([`4bd69d3`](https://github.com/camomillacms/camomilla-core/commit/4bd69d3c61e75280efa22043184eae5a2f36d286)) * Only superuser can access to all users ([`3674998`](https://github.com/camomillacms/camomilla-core/commit/367499854d08bc7536b3ca22862c06533a10f95c)) * Fix statics and templates ([`0ca7b27`](https://github.com/camomillacms/camomilla-core/commit/0ca7b2798fa4c6a5b25ad9cb26e88b50fc19cc52)) * Fix on new widgets ([`7fa9f71`](https://github.com/camomillacms/camomilla-core/commit/7fa9f71b33e73e0d5b9e40bbe914f1f245230972)) * New style and new widgets ([`0d9e0fb`](https://github.com/camomillacms/camomilla-core/commit/0d9e0fbfe28b1795260939c6eca692250cd22636)) * Media Model now has Description field ([`e8402e5`](https://github.com/camomillacms/camomilla-core/commit/e8402e59d32d098f485c6e2e0d08b640e611adea)) * Fix user creation ([`17931e5`](https://github.com/camomillacms/camomilla-core/commit/17931e5c773615e2ee746dc30179656897144014)) * Minfix on Filter in Views ([`d70f18d`](https://github.com/camomillacms/camomilla-core/commit/d70f18d03235ccf7c897eddd2819125b76b51fcf)) * Add search for images ([`1de7de4`](https://github.com/camomillacms/camomilla-core/commit/1de7de4c228895fb11cf9489e2ec8fe9e9dc91db)) * Fix admin ([`18a9ad8`](https://github.com/camomillacms/camomilla-core/commit/18a9ad8346f566c352ac15012cded89782ce5f0f)) * New repr for media ([`160a990`](https://github.com/camomillacms/camomilla-core/commit/160a990790b1a8fc262676ef374bba7bc7949c52)) * Add style ([`a78318b`](https://github.com/camomillacms/camomilla-core/commit/a78318b5d9906fb4283d6d507d61a2ce7212ca6f)) * Fix multiple media select widgets in the page ([`c2dd4e9`](https://github.com/camomillacms/camomilla-core/commit/c2dd4e9f131c78a3e35f3832adc7ca81b59cd350)) * Fix unselected media for media selector ([`9f11b51`](https://github.com/camomillacms/camomilla-core/commit/9f11b511b2c420cc44da2af63a7b1217fb2f1366)) * New dynamic media select ([`336f912`](https://github.com/camomillacms/camomilla-core/commit/336f912e3aa8615d1909b408cf8cc5d66ab14605)) * remove of tests.py that block global test run ([`bdf9eca`](https://github.com/camomillacms/camomilla-core/commit/bdf9eca743548943a319a7c8a3d9b350a8b8834d)) * Fix Articles fields ([`d8a1746`](https://github.com/camomillacms/camomilla-core/commit/d8a1746d0c73e4e2872618b3ee15d601ff185768)) * Add redactor ([`36fb4a8`](https://github.com/camomillacms/camomilla-core/commit/36fb4a8e558402676c0aa13c74e94ecebfc5f117)) * Updated Viewset of SitemapUrl Now you can read with CamomillaBasePermission You can filter your queryset by permalink ([`00f35fb`](https://github.com/camomillacms/camomilla-core/commit/00f35fb4ba01198bc6d015f7019edf0770b5f336)) * More work on slug ([`ce3a803`](https://github.com/camomillacms/camomilla-core/commit/ce3a8039d4159d1bed604be7cc19be5548bb8a99)) * Add get\_article\_with\_seo ([`9e4117a`](https://github.com/camomillacms/camomilla-core/commit/9e4117ac8220511129527eb72ed2f37fc1e62078)) * Add identifier for articles ([`9c4d585`](https://github.com/camomillacms/camomilla-core/commit/9c4d585233e1bc13d719bc6af4779eec82340c8a)) * More tests on utils ([`3e28f70`](https://github.com/camomillacms/camomilla-core/commit/3e28f70d90c31146cc08c30e666b338d31467325)) * Add tests ([`81c8bc4`](https://github.com/camomillacms/camomilla-core/commit/81c8bc44b4a5ebf03026c61ad520beaab8b19769)) * Permalink no more mandatory ([`3905a12`](https://github.com/camomillacms/camomilla-core/commit/3905a1243f31448591f1bf16b0f17cedb77d478f)) * Set null instead of cascade ([`41216bb`](https://github.com/camomillacms/camomilla-core/commit/41216bba6637e5aab7bc3684ef9ea1b0f46ee459)) * Add thumbnail ([`09c1bdc`](https://github.com/camomillacms/camomilla-core/commit/09c1bdcbb3bbf41f59d6285f7dc875c1856b66f4)) * Fix thumbnail generation ([`31b21bd`](https://github.com/camomillacms/camomilla-core/commit/31b21bd25a2d4f6ff345db4f0561b71dbd532e22)) * Check if file exists before opening ([`30c2abc`](https://github.com/camomillacms/camomilla-core/commit/30c2abc8858dae7055d818d09921ecdc0fe7b72a)) * Add command for thumbnail regeneration ([`4a1c4fe`](https://github.com/camomillacms/camomilla-core/commit/4a1c4fe8c97035f84b5698eb18f9f0ceafa1578a)) * Save and generate thumbnails in media ([`a058440`](https://github.com/camomillacms/camomilla-core/commit/a0584409f8f84d100d94809188f21b545772e3c1)) * RGB conversion hack disabled at the moment ([`5e1b656`](https://github.com/camomillacms/camomilla-core/commit/5e1b6567135a859af083826684a78a04a2b725d9)) * Change defaults ([`484be33`](https://github.com/camomillacms/camomilla-core/commit/484be3379c9b4cbabadd8c702ae1a4fcd3a93895)) * Add custom widgets for media selection ([`087e000`](https://github.com/camomillacms/camomilla-core/commit/087e0000eb55b9f795917990521dabaa1c756469)) * Updated SEO Utils Engine Hotfix for multilanguage site, and custom SitemapUrl class ([`ab69333`](https://github.com/camomillacms/camomilla-core/commit/ab69333d9be5a2c55cf920a5b946158889ad16dd)) * Add new requirements.txt ([`9a4c46b`](https://github.com/camomillacms/camomilla-core/commit/9a4c46b56293a39ba39eea54383a3d5b4869a179)) * Keep only the app in this repo ([`122b01e`](https://github.com/camomillacms/camomilla-core/commit/122b01e0a422818b861d8ce836e1735d6012bc5e)) * Update tags ([`17a30ed`](https://github.com/camomillacms/camomilla-core/commit/17a30edc5aaf63e47a58c3ffcb5da13a807f125e)) * Fix import settings ([`112d5a3`](https://github.com/camomillacms/camomilla-core/commit/112d5a3a231854ed59052339338195c07cd4769c)) * Og\_image is an image field ([`e1070c9`](https://github.com/camomillacms/camomilla-core/commit/e1070c9834f58e8dc667089d5301ee4075eefb19)) * Add get\_seo utility (thanks Busi) ([`e5463c4`](https://github.com/camomillacms/camomilla-core/commit/e5463c46067568537a4e6401a11c4032466ddf05)) * Add missing migrations ([`e81e2ca`](https://github.com/camomillacms/camomilla-core/commit/e81e2ca92a58845736b028d49a1c3a2d0d8f1f61)) * Add cache middleware ([`fcada75`](https://github.com/camomillacms/camomilla-core/commit/fcada75a9a5f037f034e80e76e0b3cb9d76fcdc1)) * Merged in hotfix/renaming-classes (pull request #9) Renamed Class ([`a06a4e7`](https://github.com/camomillacms/camomilla-core/commit/a06a4e75de4f61db752508c1703c8ef0cdc589cb)) * \[Rename] ExpandeNdArticleSerializer to ExpandedArticleSerializer ([`6c17aea`](https://github.com/camomillacms/camomilla-core/commit/6c17aea2e1b31c9fbb61105ca33a4c076629a659)) * Fix typo ([`ca90577`](https://github.com/camomillacms/camomilla-core/commit/ca90577e43ccbc178ca0286d9a9c860845bb2df5)) * Add new constraints for identifier ([`fed1d32`](https://github.com/camomillacms/camomilla-core/commit/fed1d3264875e22864f110d6d4dc471aa7f391a9)) * Contents retrieved by unique key ([`7c66627`](https://github.com/camomillacms/camomilla-core/commit/7c6662713324bcd6d41713bd753268624f8bb2a8)) * Fix thumb conversion ([`6a08f60`](https://github.com/camomillacms/camomilla-core/commit/6a08f60753383defb35a324cf5f4ce099fe2a3e6)) * URL\_PREFIX is not mandatory ([`77be0b3`](https://github.com/camomillacms/camomilla-core/commit/77be0b39bce62e8e7d85e3f2d34410b490ec37a8)) * Add some notes about default settings ([`408e3e2`](https://github.com/camomillacms/camomilla-core/commit/408e3e2e558bfcae84a98ea4a83b42298dcb5305)) * Raise an ex if AUTH\_USER\_MODEL is not defined ([`0d1b69a`](https://github.com/camomillacms/camomilla-core/commit/0d1b69aec66fe1fb84fb5e7d76be13e32d504f79)) * Fix defaults ([`d10edcf`](https://github.com/camomillacms/camomilla-core/commit/d10edcf402a99a615ce4c623551c4939e65fb4a0)) * Camomilla defaults FTW 🀘🏻 ([`cdeaf41`](https://github.com/camomillacms/camomilla-core/commit/cdeaf4136a1ed6a02fed93673f8743e27ef930d7)) * Pass β€˜reset’ to reset to origin/master ([`d3ec377`](https://github.com/camomillacms/camomilla-core/commit/d3ec37782f43ab686208f2fda43702dc523b7edf)) * New robust deploy script ([`1597fa6`](https://github.com/camomillacms/camomilla-core/commit/1597fa6031a551bbaa5099fd741a82d34eded003)) * Add defaults ([`cca7668`](https://github.com/camomillacms/camomilla-core/commit/cca766874f33bb42a25c041e80479e7113ee18f9)) * Merged in minoLotrek/bitbucketpipelinesyml-created-online-wit-1481293746573 (pull request #8) bitbucket-pipelines.yml created online with Bitbucket ([`e655cdb`](https://github.com/camomillacms/camomilla-core/commit/e655cdb93fccf99dfb3b55e25e099570c6972667)) * bitbucket-pipelines.yml created online with Bitbucket ([`0af58d9`](https://github.com/camomillacms/camomilla-core/commit/0af58d96523ada7eb24f6132e3c5b9038b2ada00)) * Merged in feature/new\_user\_profile (pull request #7) New user profile ([`253d44f`](https://github.com/camomillacms/camomilla-core/commit/253d44faebaa22cbf4e92057d869d90f77c38e09)) * Remove base user ([`3f5f057`](https://github.com/camomillacms/camomilla-core/commit/3f5f05781767f5f74799aa97d9c1b6b6be573a6e)) * More on user customisation ([`d9d4f30`](https://github.com/camomillacms/camomilla-core/commit/d9d4f304afa98dc81d6662b105b3f973d9f3eefe)) * Fix migrations again ([`fc3f56a`](https://github.com/camomillacms/camomilla-core/commit/fc3f56af240e97ef6dc2bb8be209eeaa6875209d)) * Reset migrations ([`39b8d54`](https://github.com/camomillacms/camomilla-core/commit/39b8d54aa2cc573d6b62c66204d0456bc14099d3)) * New user profile management ([`f5fb19b`](https://github.com/camomillacms/camomilla-core/commit/f5fb19b5162a55324a9a80e2f1701e30554095e2)) * Add read permissions (no way for clients to break our balls πŸ–•πŸ») ([`5e8afd3`](https://github.com/camomillacms/camomilla-core/commit/5e8afd3c84baf5404a271fd4f89911d96cd3e506)) * Merged in feature/newcontents (pull request #5) \[WIP] New contents with a page ([`c15e886`](https://github.com/camomillacms/camomilla-core/commit/c15e886e3464e212395aa68a4bff573d0c39df8a)) * Merge remote-tracking branch 'origin/master' into feature/newcontents ([`9a940f1`](https://github.com/camomillacms/camomilla-core/commit/9a940f1a19ba319340d67f5848be228e613a660a)) * Merged in feature/custompermissions (pull request #4) \[WIP] Custom permissions ([`b2f2165`](https://github.com/camomillacms/camomilla-core/commit/b2f21650c124c2ab2648d13d96d0d109a08404ba)) * Merged in feature/security\_improvements\_and\_deploy (pull request #6) New deploy with security improvements ([`48791fa`](https://github.com/camomillacms/camomilla-core/commit/48791fa4b5675c69e1304e6738737abdb52e7073)) * Add token and user permissions ([`9dd0d88`](https://github.com/camomillacms/camomilla-core/commit/9dd0d88bedaa574ea8516089db51dc201c21137e)) * Sitemap as pages ([`23a785b`](https://github.com/camomillacms/camomilla-core/commit/23a785ba49d8a771042d93a6892592e20f0b10cf)) * Let Gunicorn running with a socket πŸŽ‰ ([`dd7dae0`](https://github.com/camomillacms/camomilla-core/commit/dd7dae0e074869cc6f2ec7bc8243d559abc34deb)) * Return permissions on profile get ([`d836d93`](https://github.com/camomillacms/camomilla-core/commit/d836d93c195b6c77d2b9975626548d93bd66c64c)) * Auto set only camomilla permissions ([`67c2844`](https://github.com/camomillacms/camomilla-core/commit/67c284458fe8030d44100e04ad59b87ef6a75044)) * Add url fields for models ([`6ecc3ac`](https://github.com/camomillacms/camomilla-core/commit/6ecc3ac009a88b12ae264dba7184838c95371dda)) * New media creation ([`9c59e35`](https://github.com/camomillacms/camomilla-core/commit/9c59e35e39ad1062b7b6d1580236ecb0416d967d)) * Install setproctitle πŸŽ‰ ([`c8a8d8b`](https://github.com/camomillacms/camomilla-core/commit/c8a8d8b7fd1179c4ba6353ddb18ddf46282f4f3d)) * Kill and run unique gunicorn process ([`6afd646`](https://github.com/camomillacms/camomilla-core/commit/6afd646faa42560185604dfaadea2456fdf85e25)) * Some fixes on internal admin ([`79eeaea`](https://github.com/camomillacms/camomilla-core/commit/79eeaea9a2d4859b94d4a468d6a0f26673cb0f44)) * Restore old deploy script ([`a00d6a3`](https://github.com/camomillacms/camomilla-core/commit/a00d6a3c2045604af0a42052b236e97c7459c1b6)) * New deploy with security improvements ([`84288e9`](https://github.com/camomillacms/camomilla-core/commit/84288e9beeb93ea53c3a1593ffe4a5064e9033a8)) * Use only camomilla's categories ([`23f3ec2`](https://github.com/camomillacms/camomilla-core/commit/23f3ec2c7e0dd115b7254e5fb2bf1634cb3391af)) * Add pages ([`d76545a`](https://github.com/camomillacms/camomilla-core/commit/d76545ac7dab5f2706cc175930d3b5cec534841a)) * Add some deploy notes ([`a76e633`](https://github.com/camomillacms/camomilla-core/commit/a76e633d21e2c007c9b9a1410e06ab1a62b2aa16)) * Add deploy info ([`8ba4efc`](https://github.com/camomillacms/camomilla-core/commit/8ba4efcf762a9679baf4d6906bd1697ee4d2d5b9)) * First changes for translatable fields (hvad hack in README) ([`15fee75`](https://github.com/camomillacms/camomilla-core/commit/15fee7597da73d8b9db2f87cc506f272a90d579a)) * Add backend for creating users and set permissions ([`e92f282`](https://github.com/camomillacms/camomilla-core/commit/e92f282cc84ff8c496c66fad6e948f4dc867b64b)) * Check custom permissions in Camomilla permission class ([`ee42055`](https://github.com/camomillacms/camomilla-core/commit/ee4205596d4a7ff33e819137bc8dd41f8c327830)) * Merged in fix/abstractArticle (pull request #3) Support for inheritance. ([`a01f60f`](https://github.com/camomillacms/camomilla-core/commit/a01f60ff398b909462fef70f23b629c251b5a59a)) * Make views more abstract ([`620fb1a`](https://github.com/camomillacms/camomilla-core/commit/620fb1a7f097f1e9eaecae69ba6da7c2f65fd873)) * Cleaning code ([`6bc771f`](https://github.com/camomillacms/camomilla-core/commit/6bc771fcaf94cbfd2e42e4810de967f90152dcb5)) * All Main-Models of Camomilla (no media) now are abstract ([`430e6b7`](https://github.com/camomillacms/camomilla-core/commit/430e6b722978e21a1e938c8292d2e8ae2330944f)) * Update of gitignore ([`8d35716`](https://github.com/camomillacms/camomilla-core/commit/8d357166f0c2e75f810683e0929d32edf9097182)) * Support for inheritance of Article. Dynamic Serializer. Redefined the correlations with classes(FK), inheritance support. ([`a2983ba`](https://github.com/camomillacms/camomilla-core/commit/a2983bae82897cc8a304ed8afd5a2c5b7c59f231)) * Add level 3 if user is superuser ([`ed38b9f`](https://github.com/camomillacms/camomilla-core/commit/ed38b9fb5e3ac757946f598b9931b964b92e8b16)) * Better names for admin objects ([`8d76858`](https://github.com/camomillacms/camomilla-core/commit/8d768587ec0899b94c106dd2876dc98ad0a264f8)) * More on settings ([`f03d651`](https://github.com/camomillacms/camomilla-core/commit/f03d65180b07ecbd481df2aae464b987a7160fc1)) * Fix post on upload ([`33dcfc8`](https://github.com/camomillacms/camomilla-core/commit/33dcfc87d0928c1028db3253c67e59eda84eaf7b)) * Do not accept requests if user is not authenticated ([`1db4600`](https://github.com/camomillacms/camomilla-core/commit/1db460011f39356f00805eb967b532e696bb615f)) * Tags and categories may be blank ([`5639aed`](https://github.com/camomillacms/camomilla-core/commit/5639aed548295be8d2121c5847188dd18b1275d7)) * Remove useless plugin ([`b04c8a4`](https://github.com/camomillacms/camomilla-core/commit/b04c8a4fddb839db9714834db326a36c1ce8f08a)) * Merged in feature/check\_permissions (pull request #2) Feature/check permissions ([`1f6a5ac`](https://github.com/camomillacms/camomilla-core/commit/1f6a5ac084472854de790eefdc9d11461bff3c7d)) * Merged in feature/translatable\_permalink (pull request #1) Feature/translatable permalink and other fixes ([`fb2d1c1`](https://github.com/camomillacms/camomilla-core/commit/fb2d1c1ca039291b93a8220c45dd8a647da8fa14)) * Update README ([`9e26e7b`](https://github.com/camomillacms/camomilla-core/commit/9e26e7b97828e0b99139a3488d87be576a7dd606)) * Remove useless plugin url ([`2bf1869`](https://github.com/camomillacms/camomilla-core/commit/2bf1869fce14e8fef0cda365bb86e9fca850e01d)) * Fix README ([`119a3c9`](https://github.com/camomillacms/camomilla-core/commit/119a3c9fe6c91d2ecf4c7495abaaf22139589567)) * Fix warnings ([`2b2fed9`](https://github.com/camomillacms/camomilla-core/commit/2b2fed905099b9b4b3102855cdc058e9151f1fe9)) * Use right language in case of PUT/PATCH ([`ea7653b`](https://github.com/camomillacms/camomilla-core/commit/ea7653bf3e971817990931fd1868025416e59aa0)) * Add related name for User ([`8766e89`](https://github.com/camomillacms/camomilla-core/commit/8766e89d138df691cbc048e385c97be3d6eca29d)) * Add base permissions for Camomilla ([`c1ecaf4`](https://github.com/camomillacms/camomilla-core/commit/c1ecaf4e0501079a91bdd0a693a620911a9dab1f)) * First attempt to make translatable permalink working (refactoring needed!) πŸŽ‰ ([`4e71e5f`](https://github.com/camomillacms/camomilla-core/commit/4e71e5f7849e5a5cbfa7da8bab355b97bbf51459)) * New highlight image ([`96fc296`](https://github.com/camomillacms/camomilla-core/commit/96fc2962a140eb56efce2538bf23f161d6ca314a)) * New images file size calculation ([`aef72a7`](https://github.com/camomillacms/camomilla-core/commit/aef72a73c5acf72f3126be9c430acf25fb0ac7f2)) * Fix thumb creation ([`4e0c18e`](https://github.com/camomillacms/camomilla-core/commit/4e0c18e5eebe604a03ba2ea9ce19945e685f843c)) * Fix retrive article with the correct language ([`f5b2132`](https://github.com/camomillacms/camomilla-core/commit/f5b21329ccdab7b6a5f86c71de13e1465ef078ea)) * Add plugin support ([`6bfbdbf`](https://github.com/camomillacms/camomilla-core/commit/6bfbdbf5f683252aa5e84ec98ef19247c2a19f3a)) * Big refactoring (+ auto create profiles after user creation) ([`c77633a`](https://github.com/camomillacms/camomilla-core/commit/c77633a8d13b111bb1f1023108a0f2faad4b1dfd)) * Add user profiles serialisation ([`a16135d`](https://github.com/camomillacms/camomilla-core/commit/a16135de0abb9218b234a02719df8e9e9ce28e20)) * Add thumbnails support ([`54ba655`](https://github.com/camomillacms/camomilla-core/commit/54ba6552e89195d9da2215177a517ef4642a01a6)) * Fallback for tags and categories ([`726e320`](https://github.com/camomillacms/camomilla-core/commit/726e320a4f227b8af3333e9ac1054c60b651cb77)) * Translate support for contents ([`e8a34b9`](https://github.com/camomillacms/camomilla-core/commit/e8a34b9c8e3f6c8adc019e72b14dbfd1c1c4710b)) * Fix languages ([`ca41fac`](https://github.com/camomillacms/camomilla-core/commit/ca41facecb4cd1c0196ca2711e8beab087547f93)) * Remove useless den settings app ([`f6ef2d0`](https://github.com/camomillacms/camomilla-core/commit/f6ef2d08909ecc0df1dbe592b1f50cb6b8098aee)) * Raw languages API exposition ([`c0d040d`](https://github.com/camomillacms/camomilla-core/commit/c0d040dbf078eb293b3801a8f3be76d65c109e65)) * Media refactoring ([`5ad7c1b`](https://github.com/camomillacms/camomilla-core/commit/5ad7c1bf42fe9cec3524b54e2bbce3080b588b3b)) * Add multilanguage support ([`de9cd0a`](https://github.com/camomillacms/camomilla-core/commit/de9cd0a4795f62f20cf793d3852b0bc346381e75)) * Get additional info with the token ([`9f6caa7`](https://github.com/camomillacms/camomilla-core/commit/9f6caa761c5aa6320f43757561b5bb1b6965454c)) * Minfixes ([`5d452d2`](https://github.com/camomillacms/camomilla-core/commit/5d452d2be505e688cec8990215cf1c7169074419)) * Add sitemap ([`638038c`](https://github.com/camomillacms/camomilla-core/commit/638038c2f66d64b752fc1ae1ceb91bfee098df44)) * Add media ([`df4f82c`](https://github.com/camomillacms/camomilla-core/commit/df4f82ccb40ebb62028491b0324ac33686550d48)) * Add contents ([`c27222b`](https://github.com/camomillacms/camomilla-core/commit/c27222bf53413dccd725b9d1e7d34447f39b9689)) * Unique values for tags and categories ([`674e65a`](https://github.com/camomillacms/camomilla-core/commit/674e65a3e5151c7ac6403c8715ab7abbf6a21fdf)) * Update view ([`5ef7d6c`](https://github.com/camomillacms/camomilla-core/commit/5ef7d6cc74203e9af47fcecd251fe9dc217ca1a1)) * Tags and Categories are not mandatory ([`e1b6943`](https://github.com/camomillacms/camomilla-core/commit/e1b6943a86cbee9fd2210762c1f294b3382c2278)) * More on articles ([`f7a971b`](https://github.com/camomillacms/camomilla-core/commit/f7a971b386debf657f716477f85ba271b4fe51c0)) * Add admin for models ([`714b464`](https://github.com/camomillacms/camomilla-core/commit/714b4648498e90f4f2f3c69e4fae012acd9dd67e)) * Set up database ([`50fb87d`](https://github.com/camomillacms/camomilla-core/commit/50fb87d720c0f2b696547efbcce61f3cac80d3af)) * First import ([`7fbc2d7`](https://github.com/camomillacms/camomilla-core/commit/7fbc2d76c8bd6ea5c04b45fc5de9ee21de290401)) --- --- url: /camomilla-core/License.md --- MIT License Copyright (c) 2021 LotrΓ¨k Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.