<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Joe</title>
    <description>The latest articles on DEV Community by Joe (@hermitcommitscode).</description>
    <link>https://dev.to/hermitcommitscode</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3495949%2Ff7eae2a5-a311-42dd-bfed-daa0f15a892a.png</url>
      <title>DEV Community: Joe</title>
      <link>https://dev.to/hermitcommitscode</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hermitcommitscode"/>
    <language>en</language>
    <item>
      <title>Filtering and Searching Transactions</title>
      <dc:creator>Joe</dc:creator>
      <pubDate>Thu, 11 Sep 2025 22:32:41 +0000</pubDate>
      <link>https://dev.to/hermitcommitscode/filtering-and-searching-transactions-2eaf</link>
      <guid>https://dev.to/hermitcommitscode/filtering-and-searching-transactions-2eaf</guid>
      <description>&lt;p&gt;Let’s add filter options to your transaction list, so users can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Filter by date range&lt;/li&gt;
&lt;li&gt;Filter by category&lt;/li&gt;
&lt;li&gt;Filter by transaction type&lt;/li&gt;
&lt;li&gt;Search notes&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Update Your View: Accept Query Parameters&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We’ll use GET parameters for filtering.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```python name=tracker/views.py&lt;br&gt;
from django.db.models import Sum, Q&lt;br&gt;
from .models import Transaction, Category&lt;/p&gt;

&lt;p&gt;def transaction_list(request):&lt;br&gt;
    # Get filter params&lt;br&gt;
    category_id = request.GET.get('category')&lt;br&gt;
    transaction_type = request.GET.get('transaction_type')&lt;br&gt;
    start_date = request.GET.get('start_date')&lt;br&gt;
    end_date = request.GET.get('end_date')&lt;br&gt;
    search_query = request.GET.get('search')&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;transactions = Transaction.objects.select_related('category').order_by('-date')

# Apply filters
if category_id:
    transactions = transactions.filter(category_id=category_id)
if transaction_type:
    transactions = transactions.filter(transaction_type=transaction_type)
if start_date:
    transactions = transactions.filter(date__gte=start_date)
if end_date:
    transactions = transactions.filter(date__lte=end_date)
if search_query:
    transactions = transactions.filter(notes__icontains=search_query)

# Summaries (same as before)
income = transactions.filter(transaction_type='IN').aggregate(total=Sum('amount'))['total'] or 0
expenses = transactions.filter(transaction_type='EX').aggregate(total=Sum('amount'))['total'] or 0
balance = income - expenses
category_totals = transactions.values('category__name').annotate(total=Sum('amount'))

# Send all categories for filter dropdown
categories = Category.objects.all()

return render(request, 'tracker/transaction_list.html', {
    'transactions': transactions,
    'income': income,
    'expenses': expenses,
    'balance': balance,
    'category_totals': category_totals,
    'categories': categories,
    'selected_category': category_id,
    'selected_type': transaction_type,
    'start_date': start_date,
    'end_date': end_date,
    'search_query': search_query,
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


---

### **2. Update Your Template: Add Filter Form**

Add this form above your transaction list in `transaction_list.html`:



````html
&amp;lt;form method="get"&amp;gt;
    &amp;lt;label&amp;gt;Category:
        &amp;lt;select name="category"&amp;gt;
            &amp;lt;option value=""&amp;gt;All&amp;lt;/option&amp;gt;
            {% for cat in categories %}
                &amp;lt;option value="{{ cat.id }}" {% ifselected_category == cat.id|stringformat:"s" %}selected{% endif %}&amp;gt;{{ cat.name }}&amp;lt;/option&amp;gt;
            {% endfor %}
        &amp;lt;/select&amp;gt;
    &amp;lt;/label&amp;gt;
    &amp;lt;label&amp;gt;Type:
        &amp;lt;select name="transaction_type"&amp;gt;
            &amp;lt;option value=""&amp;gt;All&amp;lt;/option&amp;gt;
            &amp;lt;option value="IN" {% if selected_type == "IN" %}selected{% endif %}&amp;gt;Income&amp;lt;/option&amp;gt;
            &amp;lt;option value="EX" {% if selected_type == "EX" %}selected{% endif %}&amp;gt;Expense&amp;lt;/option&amp;gt;
        &amp;lt;/select&amp;gt;
    &amp;lt;/label&amp;gt;
    &amp;lt;label&amp;gt;Start Date:&amp;lt;input type="date" name="start_date" value="{{ start_date }}"&amp;gt;&amp;lt;/label&amp;gt;
    &amp;lt;label&amp;gt;End Date:&amp;lt;input type="date" name="end_date" value="{{ end_date }}"&amp;gt;&amp;lt;/label&amp;gt;
    &amp;lt;label&amp;gt;Search Notes:&amp;lt;input type="text" name="search" value="{{ search_query }}"&amp;gt;&amp;lt;/label&amp;gt;
    &amp;lt;button type="submit"&amp;gt;Filter&amp;lt;/button&amp;gt;
    &amp;lt;a href="{% url 'transaction_list' %}"&amp;gt;Clear&amp;lt;/a&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>webdev</category>
      <category>python</category>
      <category>django</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Django Finance App: Summaries &amp; Analytics (Income, Expenses, Balance)</title>
      <dc:creator>Joe</dc:creator>
      <pubDate>Thu, 11 Sep 2025 22:17:53 +0000</pubDate>
      <link>https://dev.to/hermitcommitscode/django-finance-app-summaries-analytics-income-expenses-balance-2jcc</link>
      <guid>https://dev.to/hermitcommitscode/django-finance-app-summaries-analytics-income-expenses-balance-2jcc</guid>
      <description>&lt;p&gt;Liquid syntax error: Unknown tag 'url'&lt;/p&gt;
</description>
      <category>analytics</category>
      <category>tutorial</category>
      <category>python</category>
      <category>django</category>
    </item>
    <item>
      <title>Django CRUD: Building Views, Forms &amp; Templates for Your Finance App</title>
      <dc:creator>Joe</dc:creator>
      <pubDate>Thu, 11 Sep 2025 21:59:30 +0000</pubDate>
      <link>https://dev.to/hermitcommitscode/django-crud-building-views-forms-templates-for-your-finance-app-933</link>
      <guid>https://dev.to/hermitcommitscode/django-crud-building-views-forms-templates-for-your-finance-app-933</guid>
      <description>&lt;p&gt;Liquid syntax error: Unknown tag 'url'&lt;/p&gt;
</description>
      <category>webdev</category>
      <category>python</category>
      <category>django</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Django Admin: Powerful Data Management for Finance Apps</title>
      <dc:creator>Joe</dc:creator>
      <pubDate>Thu, 11 Sep 2025 21:59:08 +0000</pubDate>
      <link>https://dev.to/hermitcommitscode/django-admin-powerful-data-management-for-finance-apps-5fbc</link>
      <guid>https://dev.to/hermitcommitscode/django-admin-powerful-data-management-for-finance-apps-5fbc</guid>
      <description>&lt;p&gt;Django comes with a built-in admin interface—no coding required!&lt;/p&gt;




&lt;h2&gt;
  
  
  1. &lt;strong&gt;Create a Superuser&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python manage.py createsuperuser
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Follow the prompts.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. &lt;strong&gt;Register Models for Admin&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Edit &lt;code&gt;tracker/admin.py&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.contrib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;admin&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Transaction&lt;/span&gt;

&lt;span class="nd"&gt;@admin.register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Category&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CategoryAdmin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;admin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModelAdmin&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;list_display&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nd"&gt;@admin.register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Transaction&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TransactionAdmin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;admin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModelAdmin&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;list_display&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;date&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;transaction_type&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;category&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;amount&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;list_filter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;transaction_type&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;category&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;date&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;search_fields&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;notes&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. &lt;strong&gt;Run the Server &amp;amp; Use Admin&lt;/strong&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python manage.py runserver
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Go to &lt;a href="http://127.0.0.1:8000/admin/" rel="noopener noreferrer"&gt;http://127.0.0.1:8000/admin/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Now you can add, edit, delete, and search transactions and categories!&lt;/p&gt;




&lt;p&gt;Next: building custom views, forms, and templates.&lt;/p&gt;




</description>
      <category>webdev</category>
      <category>django</category>
      <category>python</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Django Migrations: Turning Models Into Database Tables</title>
      <dc:creator>Joe</dc:creator>
      <pubDate>Thu, 11 Sep 2025 21:58:42 +0000</pubDate>
      <link>https://dev.to/hermitcommitscode/django-migrations-turning-models-into-database-tables-12a1</link>
      <guid>https://dev.to/hermitcommitscode/django-migrations-turning-models-into-database-tables-12a1</guid>
      <description>&lt;p&gt;Django migrations take your Python models and create real database tables.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. &lt;strong&gt;Create Migrations&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python manage.py makemigrations tracker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. &lt;strong&gt;Apply Migrations&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python manage.py migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. &lt;strong&gt;What Just Happened?&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;Category&lt;/code&gt; and &lt;code&gt;Transaction&lt;/code&gt; tables are now in your database!&lt;/li&gt;
&lt;li&gt;Django tracks changes for future updates.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Next: manage your data easily with Django admin.&lt;/p&gt;




</description>
      <category>webdev</category>
      <category>django</category>
      <category>tutorial</category>
      <category>python</category>
    </item>
    <item>
      <title>Designing Django Models: Transactions &amp; Categories for Finance Apps</title>
      <dc:creator>Joe</dc:creator>
      <pubDate>Thu, 11 Sep 2025 21:58:27 +0000</pubDate>
      <link>https://dev.to/hermitcommitscode/designing-django-models-transactions-categories-for-finance-apps-54il</link>
      <guid>https://dev.to/hermitcommitscode/designing-django-models-transactions-categories-for-finance-apps-54il</guid>
      <description>&lt;p&gt;To track finances, we need two main data types—categories (like "Food") and transactions (money in or out).&lt;/p&gt;




&lt;h2&gt;
  
  
  1. &lt;strong&gt;Plan Your Models&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Category&lt;/strong&gt;: e.g. Food, Rent, Salary&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transaction&lt;/strong&gt;: amount, date, category, type, notes&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. &lt;strong&gt;Code the Models&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Edit &lt;code&gt;tracker/models.py&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.db&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Category&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CharField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;unique&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__str__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Transaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;INCOME&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;IN&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
    &lt;span class="n"&gt;EXPENSE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;EX&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
    &lt;span class="n"&gt;TRANSACTION_TYPES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;INCOME&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Income&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EXPENSE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Expense&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;category&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ForeignKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;on_delete&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CASCADE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DecimalField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_digits&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;decimal_places&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DateField&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;transaction_type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CharField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;TRANSACTION_TYPES&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;notes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;TextField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;blank&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__str__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_transaction_type_display&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; - &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; on &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. &lt;strong&gt;Why This Structure?&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ForeignKey&lt;/strong&gt; connects transactions to categories&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choices&lt;/strong&gt; enforce transaction type&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Let’s turn these models into database tables next!&lt;/p&gt;




</description>
      <category>django</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>python</category>
    </item>
    <item>
      <title>Creating Your First Django App for Personal Finance</title>
      <dc:creator>Joe</dc:creator>
      <pubDate>Thu, 11 Sep 2025 21:57:59 +0000</pubDate>
      <link>https://dev.to/hermitcommitscode/creating-your-first-django-app-for-personal-finance-42f7</link>
      <guid>https://dev.to/hermitcommitscode/creating-your-first-django-app-for-personal-finance-42f7</guid>
      <description>&lt;p&gt;Now that our Django project is set up, it's time to add an app—the heart of your financial tracker!&lt;/p&gt;




&lt;h2&gt;
  
  
  1. &lt;strong&gt;What Is a Django App?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A "Django app" is a module that handles a specific feature (like tracking transactions). Projects can have many apps.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. &lt;strong&gt;Create the Tracker App&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Run this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python manage.py startapp tracker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your folder now includes &lt;code&gt;tracker/&lt;/code&gt; with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;models.py&lt;/code&gt;: Data models&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;views.py&lt;/code&gt;: Request handlers&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;admin.py&lt;/code&gt;: Admin settings&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. &lt;strong&gt;Register the App&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Open &lt;code&gt;config/settings.py&lt;/code&gt; and add &lt;code&gt;'tracker',&lt;/code&gt; to &lt;code&gt;INSTALLED_APPS&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;INSTALLED_APPS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="c1"&gt;# ...default apps
&lt;/span&gt;    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;tracker&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4. &lt;strong&gt;Why Register?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This lets Django know to include your app's models, views, and admin features.&lt;/p&gt;




&lt;p&gt;Next up: designing the models for your tracker!&lt;/p&gt;




</description>
      <category>webdev</category>
      <category>django</category>
      <category>python</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Setting Up Django: Your Financial Tracker Starts Here</title>
      <dc:creator>Joe</dc:creator>
      <pubDate>Thu, 11 Sep 2025 21:57:31 +0000</pubDate>
      <link>https://dev.to/hermitcommitscode/setting-up-django-your-financial-tracker-starts-here-57og</link>
      <guid>https://dev.to/hermitcommitscode/setting-up-django-your-financial-tracker-starts-here-57og</guid>
      <description>&lt;h2&gt;
  
  
  Setting Up Django: Your Financial Tracker Starts Here
&lt;/h2&gt;

&lt;p&gt;Welcome to Part 2 of my Django financial tracker series! In this post, we'll go from zero to a working Django project—you'll be ready to code in minutes.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. &lt;strong&gt;Create a Python Virtual Environment&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A virtual environment keeps your dependencies isolated.&lt;br&gt;&lt;br&gt;
Run these commands in your project folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python &lt;span class="nt"&gt;-m&lt;/span&gt; venv venv
&lt;span class="nb"&gt;source &lt;/span&gt;venv/bin/activate  &lt;span class="c"&gt;# On Windows: venv\Scripts\activate&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. &lt;strong&gt;Install Django&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Install Django inside your virtual environment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;django
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. &lt;strong&gt;Start Your Django Project&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In your folder, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;django-admin startproject config &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your folder should now look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;config/
    __init__.py
    settings.py
    urls.py
    asgi.py
    wsgi.py
manage.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4. &lt;strong&gt;What Are These Files?&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;manage.py&lt;/code&gt;: Django's command-line utility&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;config/&lt;/code&gt;: Project settings, URLs, and core files&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;That’s it! You’ve got a Django project ready to go.&lt;br&gt;&lt;br&gt;
Next up: creating the core tracker app.&lt;/p&gt;




</description>
      <category>webdev</category>
      <category>django</category>
      <category>tutorial</category>
      <category>python</category>
    </item>
    <item>
      <title>Building a Django Financial Tracker: Planning, Goals, and Kickoff</title>
      <dc:creator>Joe</dc:creator>
      <pubDate>Thu, 11 Sep 2025 21:22:02 +0000</pubDate>
      <link>https://dev.to/hermitcommitscode/building-a-django-financial-tracker-planning-goals-and-kickoff-241e</link>
      <guid>https://dev.to/hermitcommitscode/building-a-django-financial-tracker-planning-goals-and-kickoff-241e</guid>
      <description>&lt;p&gt;Hi devs! I’m Hermit-commits-code, and I’m starting a hands-on series where I build a personal finance tracker from scratch—using Django and some modern frontend tools.&lt;/p&gt;

&lt;p&gt;Why? Just like many devs, I want to better manage my money, but I also want a tool that fits my workflow and gives me a reason to level up my backend skills. Plus, I love sharing what I learn in public!&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;What Will This Project Do?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I’m aiming for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tracking income and expenses&lt;/strong&gt; with details for each transaction&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Categories&lt;/strong&gt; (like Food, Rent, Salary) for every transaction&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Summaries and analytics&lt;/strong&gt; (totals, balances, breakdowns)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search and filter tools&lt;/strong&gt; (by category, date, amount, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A modern UI&lt;/strong&gt; (planning to use HTMX for dynamic interactions after the backend is up)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bonus goals:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CSV import/export&lt;/li&gt;
&lt;li&gt;User authentication&lt;/li&gt;
&lt;li&gt;Budgets and alerts&lt;/li&gt;
&lt;li&gt;Analytics charts&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Tech Stack&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Django (Python)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; HTMX (for interactivity, later in the series)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database:&lt;/strong&gt; SQLite (simple for dev; upgradeable)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform:&lt;/strong&gt; dev.to for blogging the journey&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;My Approach&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Share every step, including the “why” behind design choices&lt;/li&gt;
&lt;li&gt;Include code, commands, and explanations&lt;/li&gt;
&lt;li&gt;Be honest about mistakes, pivots, and discoveries&lt;/li&gt;
&lt;li&gt;Welcome feedback (and maybe even collaborators!)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;What’s Next?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The next post will cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating a Python virtual environment&lt;/li&gt;
&lt;li&gt;Installing Django&lt;/li&gt;
&lt;li&gt;Bootstrapping the project folder&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’ll include all commands and code so you can follow along—or use this as a reference for your own Django projects.&lt;/p&gt;




&lt;p&gt;Ready to build together? Let’s go!&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Stay tuned for Part 2: “Setting Up Django From Scratch for Your Financial Tracker”&lt;/em&gt;&lt;/p&gt;

</description>
      <category>django</category>
      <category>python</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
