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
+
- Excel-like Table
-
-
-
-
-
-
-
-
-
- # |
- ID |
- Name |
- Age |
- Email |
- Date Joined |
- Actions |
+ Helium Input
+
+
+
+
+
+ # |
+ ID |
+ Client |
+ Entry 1 |
+ Entry 2 |
+ Date Joined |
+ Actions |
+
+
+
+ {% for entry in entries_table1 %}
+
+ {{ forloop.counter }} |
+ {{ entry.id }} |
+ {{ entry.client.name }} |
+ {{ entry.age }} |
+ {{ entry.email }} |
+ {{ entry.date_joined }} |
+
+
+
+ |
-
-
- {% for entry in entries_table1 %}
-
- {{ forloop.counter }} |
- {{ entry.id }} |
- {{ entry.name }} |
- {{ entry.age }} |
- {{ entry.email }} |
- {{ entry.date_joined }} |
-
-
-
- |
-
- {% endfor %}
-
-
-
+ {% endfor %}
+
+
-
-