diff --git a/db.sqlite3 b/db.sqlite3 index a57b2b8..4d79c07 100644 Binary files a/db.sqlite3 and b/db.sqlite3 differ diff --git a/excel_mimic/urls.py b/excel_mimic/urls.py index bb88b3e..1497463 100644 --- a/excel_mimic/urls.py +++ b/excel_mimic/urls.py @@ -10,7 +10,7 @@ Function views Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') -Including another URLconftesting +Including another URLconftesting test 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ @@ -19,5 +19,5 @@ from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), # Admin site - path('', include('Sheets.urls')), # Sheets app URLs + path('', include('sheets.urls')), # Sheets app URLs ] \ No newline at end of file diff --git a/sheets/migrations/0001_initial.py b/sheets/migrations/0001_initial.py index d91b967..684dcea 100644 --- a/sheets/migrations/0001_initial.py +++ b/sheets/migrations/0001_initial.py @@ -1,5 +1,6 @@ -# Generated by Django 5.1.3 on 2024-12-04 13:22 +# Generated by Django 5.1.5 on 2025-04-15 10:13 +import django.db.models.deletion from django.db import migrations, models @@ -12,10 +13,31 @@ class Migration(migrations.Migration): operations = [ migrations.CreateModel( - name='Sheet', + name='Client', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=100)), + ('address', models.TextField()), + ], + ), + migrations.CreateModel( + name='ExcelEntry', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('age', models.IntegerField()), + ('email', models.EmailField(max_length=254)), + ('date_joined', models.DateField(auto_now_add=True)), + ('client', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sheets.client')), + ], + ), + migrations.CreateModel( + name='SecondTableEntry', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('age', models.IntegerField()), + ('email', models.EmailField(max_length=254)), + ('date_joined', models.DateField(auto_now_add=True)), + ('client', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sheets.client')), ], ), ] diff --git a/sheets/migrations/0002_maincolumn_row_subcolumn_cell.py b/sheets/migrations/0002_maincolumn_row_subcolumn_cell.py deleted file mode 100644 index e12c666..0000000 --- a/sheets/migrations/0002_maincolumn_row_subcolumn_cell.py +++ /dev/null @@ -1,46 +0,0 @@ -# Generated by Django 5.1.3 on 2024-12-04 14:19 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('sheets', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='MainColumn', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=100)), - ('sheet', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='main_columns', to='sheets.sheet')), - ], - ), - migrations.CreateModel( - name='Row', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('sheet', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='rows', to='sheets.sheet')), - ], - ), - migrations.CreateModel( - name='SubColumn', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=100)), - ('main_column', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sub_columns', to='sheets.maincolumn')), - ], - ), - migrations.CreateModel( - name='Cell', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('value', models.CharField(blank=True, max_length=255, null=True)), - ('row', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='cells', to='sheets.row')), - ('sub_column', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='cells', to='sheets.subcolumn')), - ], - ), - ] diff --git a/sheets/migrations/0003_remove_maincolumn_sheet_remove_subcolumn_main_column_and_more.py b/sheets/migrations/0003_remove_maincolumn_sheet_remove_subcolumn_main_column_and_more.py deleted file mode 100644 index 16449f2..0000000 --- a/sheets/migrations/0003_remove_maincolumn_sheet_remove_subcolumn_main_column_and_more.py +++ /dev/null @@ -1,50 +0,0 @@ -# Generated by Django 5.1.4 on 2024-12-10 07:27 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('sheets', '0002_maincolumn_row_subcolumn_cell'), - ] - - operations = [ - migrations.RemoveField( - model_name='maincolumn', - name='sheet', - ), - migrations.RemoveField( - model_name='subcolumn', - name='main_column', - ), - migrations.RemoveField( - model_name='row', - name='sheet', - ), - migrations.RenameModel( - old_name='Sheet', - new_name='Parent', - ), - migrations.CreateModel( - name='Child', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('description', models.CharField(max_length=200)), - ('parent', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='children', to='sheets.parent')), - ], - ), - migrations.DeleteModel( - name='Cell', - ), - migrations.DeleteModel( - name='MainColumn', - ), - migrations.DeleteModel( - name='SubColumn', - ), - migrations.DeleteModel( - name='Row', - ), - ] diff --git a/sheets/migrations/0004_excelentry_delete_child_delete_parent.py b/sheets/migrations/0004_excelentry_delete_child_delete_parent.py deleted file mode 100644 index 9bf73b2..0000000 --- a/sheets/migrations/0004_excelentry_delete_child_delete_parent.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by Django 5.1.5 on 2025-01-22 13:05 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('sheets', '0003_remove_maincolumn_sheet_remove_subcolumn_main_column_and_more'), - ] - - operations = [ - migrations.CreateModel( - name='ExcelEntry', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=100)), - ('age', models.IntegerField()), - ('email', models.EmailField(max_length=254)), - ('date_joined', models.DateField(auto_now_add=True)), - ], - ), - migrations.DeleteModel( - name='Child', - ), - migrations.DeleteModel( - name='Parent', - ), - ] diff --git a/sheets/migrations/0005_secondtableentry.py b/sheets/migrations/0005_secondtableentry.py deleted file mode 100644 index 0d2fbd5..0000000 --- a/sheets/migrations/0005_secondtableentry.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 5.1.5 on 2025-02-17 10:24 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('sheets', '0004_excelentry_delete_child_delete_parent'), - ] - - operations = [ - migrations.CreateModel( - name='SecondTableEntry', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=100)), - ('age', models.IntegerField()), - ('email', models.EmailField(max_length=254)), - ('date_joined', models.DateField(auto_now_add=True)), - ], - ), - ] diff --git a/sheets/migrations/0006_client.py b/sheets/migrations/0006_client.py deleted file mode 100644 index abca40c..0000000 --- a/sheets/migrations/0006_client.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 5.1.5 on 2025-04-08 11:23 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('sheets', '0005_secondtableentry'), - ] - - operations = [ - migrations.CreateModel( - name='Client', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=100)), - ('address', models.TextField()), - ], - ), - ] diff --git a/sheets/models.py b/sheets/models.py index 5617d6a..130df7e 100644 --- a/sheets/models.py +++ b/sheets/models.py @@ -8,19 +8,13 @@ class Client(models.Model): return self.name class ExcelEntry(models.Model): - name = models.CharField(max_length=100) - age = models.IntegerField() - email = models.EmailField() - date_joined = models.DateField(auto_now_add=True) - - def __str__(self): - return self.name - -class SecondTableEntry(models.Model): - name = models.CharField(max_length=100) + client = models.ForeignKey(Client, on_delete=models.CASCADE) age = models.IntegerField() email = models.EmailField() date_joined = models.DateField(auto_now_add=True) - def __str__(self): - return self.name \ No newline at end of file +class SecondTableEntry(models.Model): + client = models.ForeignKey(Client, on_delete=models.CASCADE) + age = models.IntegerField() + email = models.EmailField() + date_joined = models.DateField(auto_now_add=True) diff --git a/sheets/templates/clients_table.html b/sheets/templates/clients_table.html index 85cbb1c..9fd835c 100644 --- a/sheets/templates/clients_table.html +++ b/sheets/templates/clients_table.html @@ -109,7 +109,6 @@ - ← Back to Main

Clients Table

@@ -162,10 +161,10 @@
- + - +
@@ -189,20 +188,18 @@ let address = $('#add-address').val(); $.ajax({ - url: `/add-entry/${currentModelName}/`, + url: `/add-entry/Client/`, method: 'POST', data: { 'name': name, 'address': address, - 'age': 0, - 'email': 'none@example.com', 'csrfmiddlewaretoken': '{{ csrf_token }}' }, success: function (response) { let rowCount = $('tbody tr').length + 1; let newRow = ` - ${rowCount} + ${rowCount} ${response.id} ${response.name} ${response.address} @@ -214,6 +211,9 @@ `; $('tbody').append(newRow); $('#add-popup').fadeOut(); + }, + error: function (xhr) { + alert('Failed to add client: ' + xhr.responseText); } }); }); @@ -272,7 +272,14 @@ success: function (response) { if (response.status === 'success') { row.fadeOut(300, function () { $(this).remove(); }); + } else { + alert('Delete failed: ' + response.message); } + }, + error: function (xhr, status, error) { + alert('Delete request failed:\n' + xhr.responseText); + console.log('Error:', error); + console.log('Status:', status); } }); }); diff --git a/sheets/templates/table_one.html b/sheets/templates/table_one.html index fb11bdc..ece7b55 100644 --- a/sheets/templates/table_one.html +++ b/sheets/templates/table_one.html @@ -3,7 +3,7 @@ - Excel-like Table + Helium Input @@ -14,11 +14,6 @@ padding: 20px; background-color: #f4f4f9; } - .container { - display: flex; - justify-content: space-between; - gap: 20px; - } .table-container { width: 48%; background-color: white; @@ -56,11 +51,11 @@ cursor: pointer; font-size: 14px; } - .edit-btn { + .edit-btn-one { background-color: #28a745; color: white; } - .delete-btn { + .delete-btn-one { background-color: #dc3545; color: white; } @@ -76,7 +71,7 @@ box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); z-index: 1000; } - .popup input { + .popup input, .popup select { display: block; margin-bottom: 10px; width: 100%; @@ -115,92 +110,90 @@ -
- - - ⇦ Go to Clients - -
+ + ⇦ Go to Clients + -

Excel-like Table

- - -
- -
- - - - - - - - - - - +

Helium Input

+
+ +
#IDNameAgeEmailDate JoinedActions
+ + + + + + + + + + + + + {% for entry in entries_table1 %} + + + + + + + + - - - {% for entry in entries_table1 %} - - - - - - - - - - {% endfor %} - -
#IDClientEntry 1Entry 2Date JoinedActions
{{ forloop.counter }}{{ entry.id }}{{ entry.client.name }}{{ entry.age }}{{ entry.email }}{{ entry.date_joined }} + + +
{{ forloop.counter }} {{ entry.id }}{{ entry.name }}{{ entry.age }}{{ entry.email }}{{ entry.date_joined }} - - -
-
+ {% endfor %} + +
- -