Add more info to captured email table and allow csv upload (#1998)

This commit is contained in:
Greg Kaleka
2025-12-01 14:00:17 -05:00
committed by GitHub
parent 69a652d066
commit 34503e6101
6 changed files with 124 additions and 3 deletions

View File

@@ -75,6 +75,7 @@ INSTALLED_APPS += [
"health_check.db",
"health_check.contrib.celery",
"imagekit",
"import_export",
"django_countries",
# Allows authentication for Mailman
"oauth2_provider",

View File

@@ -1,9 +1,53 @@
from django.contrib import admin
from import_export.admin import ImportExportModelAdmin
from import_export import resources, fields
from marketing.models import CapturedEmail
class CapturedEmailResource(resources.ModelResource):
email = fields.Field(column_name="Email", attribute="email")
first_name = fields.Field(column_name="Name (First Name)", attribute="first_name")
last_name = fields.Field(column_name="Name (Last Name)", attribute="last_name")
mi = fields.Field(column_name="Name (M.I.)", attribute="mi")
title = fields.Field(column_name="Title", attribute="title")
company = fields.Field(column_name="Company", attribute="company")
address_city = fields.Field(column_name="Address (City)", attribute="address_city")
address_state = fields.Field(
column_name="Address (State)", attribute="address_state"
)
address_country = fields.Field(
column_name="Address (Country)", attribute="address_country"
)
class Meta:
model = CapturedEmail
# Use email as the natural key so re-imports update instead of duplicating
import_id_fields = ["email"]
skip_unchanged = True
report_skipped = True
fields = (
"email",
"first_name",
"last_name",
"mi",
"title",
"company",
"address_city",
"address_state",
"address_country",
)
@admin.register(CapturedEmail)
class CapturedEmailAdmin(admin.ModelAdmin):
model = CapturedEmail
list_display = ("email", "referrer", "page")
class CapturedEmailAdmin(ImportExportModelAdmin):
resource_class = CapturedEmailResource
list_display = (
"email",
"first_name",
"last_name",
"company",
"address_city",
"address_state",
"address_country",
)

View File

@@ -0,0 +1,58 @@
# Generated by Django 5.2.7 on 2025-11-04 22:23
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("marketing", "0002_detailpage_outreachhomepage_programpage_and_more"),
]
operations = [
migrations.AddField(
model_name="capturedemail",
name="address_city",
field=models.CharField(blank=True, default=""),
),
migrations.AddField(
model_name="capturedemail",
name="address_country",
field=models.CharField(blank=True, default=""),
),
migrations.AddField(
model_name="capturedemail",
name="address_state",
field=models.CharField(blank=True, default=""),
),
migrations.AddField(
model_name="capturedemail",
name="company",
field=models.CharField(blank=True, default=""),
),
migrations.AddField(
model_name="capturedemail",
name="first_name",
field=models.CharField(blank=True, default=""),
),
migrations.AddField(
model_name="capturedemail",
name="last_name",
field=models.CharField(blank=True, default=""),
),
migrations.AddField(
model_name="capturedemail",
name="mi",
field=models.CharField(blank=True, default="", verbose_name="M.I."),
),
migrations.AddField(
model_name="capturedemail",
name="opted_out",
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name="capturedemail",
name="title",
field=models.CharField(blank=True, default=""),
),
]

View File

@@ -26,6 +26,16 @@ RICH_TEXT_FEATURES = [
class CapturedEmail(models.Model):
email = models.EmailField()
first_name = models.CharField(blank=True, default="")
last_name = models.CharField(blank=True, default="")
mi = models.CharField(blank=True, default="", verbose_name="M.I.")
title = models.CharField(blank=True, default="")
company = models.CharField(blank=True, default="")
address_city = models.CharField(blank=True, default="")
address_state = models.CharField(blank=True, default="")
address_country = models.CharField(blank=True, default="")
opted_out = models.BooleanField(default=False)
referrer = models.CharField(blank=True, default="")
page = models.ForeignKey(
Page,

View File

@@ -10,6 +10,7 @@ django-db-geventpool
django-extensions
django-health-check
django-imagekit
django-import-export
django-oauth-toolkit
django-redis
django-upgrade

View File

@@ -109,6 +109,8 @@ cycler==0.12.1
# via matplotlib
decorator==5.2.1
# via ipython
diff-match-patch==20241021
# via django-import-export
defusedxml==0.7.1
# via willow
distlib==0.4.0
@@ -132,6 +134,7 @@ django==5.2.8
# django-filter
# django-haystack
# django-health-check
# django-import-export
# django-js-asset
# django-modelcluster
# django-oauth-toolkit
@@ -177,6 +180,8 @@ django-health-check==3.20.0
# via -r ./requirements.in
django-imagekit==6.0.0
# via -r ./requirements.in
django-import-export==4.3.13
# via -r ./requirements.in
django-js-asset==3.1.2
# via django-mptt
django-modelcluster==6.4
@@ -483,6 +488,8 @@ stack-data==0.6.3
# via ipython
structlog==25.5.0
# via -r ./requirements.in
tablib==3.9.0
# via django-import-export
tabulate==0.9.0
# via interrogate
telepath==0.3.1