Do some more shit
This commit is contained in:
parent
a4e58a5fa4
commit
1952d7f3d4
5 changed files with 114 additions and 23 deletions
|
|
@ -0,0 +1,45 @@
|
||||||
|
# Generated by Django 5.0.6 on 2024-06-25 20:50
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("brew", "0003_brew_notes"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="brew",
|
||||||
|
name="final_gravity",
|
||||||
|
field=models.FloatField(null=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="brew",
|
||||||
|
name="original_gravity",
|
||||||
|
field=models.FloatField(null=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="addition",
|
||||||
|
name="brew",
|
||||||
|
field=models.ForeignKey(
|
||||||
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
|
related_name="additions",
|
||||||
|
to="brew.brew",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="brew",
|
||||||
|
name="bottled_volume",
|
||||||
|
field=models.FloatField(help_text="Volume of liquid bottled", null=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="brew",
|
||||||
|
name="priming_sugar",
|
||||||
|
field=models.FloatField(
|
||||||
|
help_text="Mass of priming sugar for the whole batch", null=True
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -6,20 +6,33 @@ from django.db import models
|
||||||
class Brew(models.Model):
|
class Brew(models.Model):
|
||||||
|
|
||||||
name = models.CharField(max_length=255)
|
name = models.CharField(max_length=255)
|
||||||
|
style = models.ForeignKey("styles.Style", on_delete=models.PROTECT)
|
||||||
|
notes = models.TextField(default="", blank=True)
|
||||||
|
|
||||||
pitch_date = models.DateField(null=True)
|
pitch_date = models.DateField(null=True)
|
||||||
bottling_date = models.DateField(null=True)
|
|
||||||
|
|
||||||
style = models.ForeignKey("styles.Style", on_delete=models.PROTECT)
|
|
||||||
|
|
||||||
fermenter_volume = models.FloatField(
|
fermenter_volume = models.FloatField(
|
||||||
help_text="Volume of liquid in fermenter prior to piching yeast"
|
help_text="Volume of liquid in fermenter prior to piching yeast"
|
||||||
)
|
)
|
||||||
bottled_volume = models.FloatField(help_text="Volume of liquid bottled")
|
|
||||||
|
|
||||||
priming_sugar = models.FloatField(help_text="Mass of priming sugar for the whole batch")
|
bottling_date = models.DateField(null=True)
|
||||||
|
bottled_volume = models.FloatField(null=True, help_text="Volume of liquid bottled")
|
||||||
|
priming_sugar = models.FloatField(
|
||||||
|
null=True, help_text="Mass of priming sugar for the whole batch"
|
||||||
|
)
|
||||||
|
|
||||||
notes = models.TextField(default="", blank=True)
|
original_gravity = models.FloatField(null=True)
|
||||||
|
final_gravity = models.FloatField(null=True)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def abv(self):
|
||||||
|
og = self.original_gravity
|
||||||
|
fg = self.final_gravity
|
||||||
|
|
||||||
|
if og is None or fg is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
delta = self.original_gravity - self.final_gravity
|
||||||
|
return (76.08 * delta / (1.775 - og)) * (fg / 0.794)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.style}: {self.name}"
|
return f"{self.style}: {self.name}"
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
from django.views.generic import ListView, DetailView
|
from django.views.generic import ListView, DetailView
|
||||||
|
|
||||||
|
from ..ingredients.models import Ingredient
|
||||||
from .models import Brew
|
from .models import Brew
|
||||||
|
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
|
|
@ -13,4 +14,11 @@ class BrewView(DetailView):
|
||||||
model = Brew
|
model = Brew
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
return super().get_context_data(ingredients=self.object.additions.all(), **kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
|
for value, label in Ingredient.Type.choices:
|
||||||
|
print(label, value)
|
||||||
|
context[label] = self.object.additions.filter(ingredient__kind=value)
|
||||||
|
|
||||||
|
context["ingredient_types"] = Ingredient.Type.names
|
||||||
|
|
||||||
|
return context
|
||||||
|
|
|
||||||
|
|
@ -29,13 +29,9 @@
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block bootstrap5_content %}
|
{% block bootstrap5_content %}
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-6">
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endblock bootstrap5_content %}
|
{% endblock bootstrap5_content %}
|
||||||
{% block bootstrap5_after_content %}
|
{% block bootstrap5_after_content %}
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,41 @@
|
||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
<h2>{{ object.name }}</h2>
|
<h2>{{ object.name }}</h2>
|
||||||
<h4>{{ object.style }}</h4>
|
<h4>{{ object.style }}</h4>
|
||||||
<p>{{ object.notes }}</p>
|
<p>{{ object.notes }}</p>
|
||||||
<h3>Ingredients</h3>
|
<h3>Fermentables</h3>
|
||||||
<ul>
|
<ul>
|
||||||
{% for ingredient in ingredients %}
|
{% for add in Fermentable %}
|
||||||
<li>{{ ingredient.humanised_mass }}{{ ingredient.unit }} of {{ ingredient.ingredient.name }}</li>
|
<li>{{ add.humanised_mass }}{{ add.unit }} - {{ add.ingredient.producer }} {{ add.ingredient.name }}</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
<h3>Yeast</h3>
|
||||||
|
<ul>
|
||||||
|
{% for add in Yeast %}
|
||||||
|
<li>{{ add.humanised_mass }}{{ add.unit }} - {{ add.ingredient.producer }} {{ add.ingredient.name }}</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
<h3>Chemical</h3>
|
||||||
|
<ul>
|
||||||
|
{% for add in Chemical %}
|
||||||
|
<li>{{ add.humanised_mass }}{{ add.unit }} - {{ add.ingredient.producer }} {{ add.ingredient.name }}</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
<h3>Bottling ({{ object.bottling_date }})</h3>
|
||||||
|
{{ object.priming_sugar }}g of priming suger for {{ object.bottled_volume }}L of bottled liquid.
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
OG: {{ object.original_gravity }}
|
||||||
|
FG: {{ object.final_gravity }}
|
||||||
|
{% if object.abv %}
|
||||||
|
ABV: {{ object.abv|floatformat:1 }}%
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue