فهرست منبع

Apply DraftStateMixin and RevisionMixin to BreadIngredient model

Sage Abdullah 2 سال پیش
والد
کامیت
7815be8ae0

+ 90 - 0
bakerydemo/breads/migrations/0006_breadingredient_expire_at_breadingredient_expired_and_more.py

@@ -0,0 +1,90 @@
+# Generated by Django 4.1.2 on 2022-10-20 13:38
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("wagtailcore", "0077_alter_revision_user"),
+        ("breads", "0005_breadtype_latest_revision"),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name="breadingredient",
+            name="expire_at",
+            field=models.DateTimeField(
+                blank=True, null=True, verbose_name="expiry date/time"
+            ),
+        ),
+        migrations.AddField(
+            model_name="breadingredient",
+            name="expired",
+            field=models.BooleanField(
+                default=False, editable=False, verbose_name="expired"
+            ),
+        ),
+        migrations.AddField(
+            model_name="breadingredient",
+            name="first_published_at",
+            field=models.DateTimeField(
+                blank=True, db_index=True, null=True, verbose_name="first published at"
+            ),
+        ),
+        migrations.AddField(
+            model_name="breadingredient",
+            name="go_live_at",
+            field=models.DateTimeField(
+                blank=True, null=True, verbose_name="go live date/time"
+            ),
+        ),
+        migrations.AddField(
+            model_name="breadingredient",
+            name="has_unpublished_changes",
+            field=models.BooleanField(
+                default=False, editable=False, verbose_name="has unpublished changes"
+            ),
+        ),
+        migrations.AddField(
+            model_name="breadingredient",
+            name="last_published_at",
+            field=models.DateTimeField(
+                editable=False, null=True, verbose_name="last published at"
+            ),
+        ),
+        migrations.AddField(
+            model_name="breadingredient",
+            name="latest_revision",
+            field=models.ForeignKey(
+                blank=True,
+                editable=False,
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="+",
+                to="wagtailcore.revision",
+                verbose_name="latest revision",
+            ),
+        ),
+        migrations.AddField(
+            model_name="breadingredient",
+            name="live",
+            field=models.BooleanField(
+                default=True, editable=False, verbose_name="live"
+            ),
+        ),
+        migrations.AddField(
+            model_name="breadingredient",
+            name="live_revision",
+            field=models.ForeignKey(
+                blank=True,
+                editable=False,
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="+",
+                to="wagtailcore.revision",
+                verbose_name="live revision",
+            ),
+        ),
+    ]

+ 2 - 2
bakerydemo/breads/models.py

@@ -4,7 +4,7 @@ from django.db import models
 from modelcluster.fields import ParentalManyToManyField
 from wagtail.admin.panels import FieldPanel, MultiFieldPanel
 from wagtail.fields import StreamField
-from wagtail.models import Page, RevisionMixin
+from wagtail.models import DraftStateMixin, Page, RevisionMixin
 from wagtail.search import index
 from wagtail.snippets.models import register_snippet
 
@@ -33,7 +33,7 @@ class Country(models.Model):
 
 
 @register_snippet
-class BreadIngredient(models.Model):
+class BreadIngredient(DraftStateMixin, RevisionMixin, models.Model):
     """
     Standard Django model that is displayed as a snippet within the admin due
     to the `@register_snippet` decorator. We use a new piece of functionality

+ 7 - 0
bakerydemo/static/css/main.css

@@ -1236,6 +1236,13 @@ footer {
   margin: 0 0 20px;
 }
 
+.bread-detail__meta-ingredient--draft {
+  color: transparent;
+  user-select: none;
+  cursor: help;
+  text-shadow: 0 0 7px rgb(0 0 0 / 50%);
+}
+
 @media (min-width: 992px) {
   .bread-detail__meta {
     background-color: var(--cream);

+ 10 - 1
bakerydemo/templates/breads/bread_page.html

@@ -39,7 +39,16 @@
                                     <ul>
                                         {% for ingredient in ingredients %}
                                             <li>
-                                                {{ ingredient.name }}
+                                                {% if ingredient.live %}
+                                                    {# If it's live, show as-is #}
+                                                    {{ ingredient.name }}
+                                                {% else %}
+                                                    {# EXAMPLE: we can show a placeholder element for instances that are not live #}
+                                                    <span class="bread-detail__meta-ingredient--draft">
+                                                        Draft ingredient
+                                                    </span>
+                                                    (draft)
+                                                {% endif %}
                                             </li>
                                         {% endfor %}
                                     </ul>