diff --git a/src/data/templates/view_name_detail.html b/src/data/templates/view_name_detail.html
index e622e246b..356b83fbe 100644
--- a/src/data/templates/view_name_detail.html
+++ b/src/data/templates/view_name_detail.html
@@ -11,7 +11,7 @@
-
NAME{# form|make_name:user #}
+
{{form|make_name:user}}
{% comment %} 4 cols {% endcomment %}
@@ -24,27 +24,34 @@
@@ -52,25 +59,25 @@
{% else %}
- Family: |
+ {{form.surname.label}}: |
{{form.surname}} |
- Prefix: |
+ {{form.prefix.label}}: |
[Private] |
- Given: |
+ {{form.given.label}}: |
[Private] |
- Call Name: |
+ {{form.call.label}}: |
[Private] |
-
Title: |
+
{{form.title.label}}: |
[Private] |
-
Suffix: |
+
{{form.suffix.label}}: |
[Private] |
- Patronymic: |
+ {{form.patronymic.label}}: |
[Private] |
- Type: |
+ {{form.name_type.label}}: |
{{form.name_type}} |
@@ -105,7 +112,7 @@
{% else %}
[
Edit Name]
[
Delete Name]
-[
Add Name]
+[
Add Name]
{% endifequal %}
{% else %}
{% endif %}
diff --git a/src/web/forms.py b/src/web/grampsdb/forms.py
similarity index 94%
rename from src/web/forms.py
rename to src/web/grampsdb/forms.py
index 755932c95..7e93e3c67 100644
--- a/src/web/forms.py
+++ b/src/web/grampsdb/forms.py
@@ -21,7 +21,10 @@ class NameForm(forms.ModelForm):
class Meta:
model = Name
fields = ("suffix", "first_name", "title", "prefix",
- "call", "surname", "patronymic", "name_type")
+ "call", "surname", "patronymic", "name_type",
+ "preferred")
+ # Add these because they are TextFields, which render as
+ # Textareas:
surname = forms.CharField(required=False, widget=TextInput())
first_name = forms.CharField(required=False, widget=TextInput())
title = forms.CharField(required=False, widget=TextInput())
diff --git a/src/web/grampsdb/templatetags/my_tags.py b/src/web/grampsdb/templatetags/my_tags.py
index 403677c9f..f2f8337cf 100644
--- a/src/web/grampsdb/templatetags/my_tags.py
+++ b/src/web/grampsdb/templatetags/my_tags.py
@@ -49,7 +49,10 @@ make_name.is_safe = True
register.filter('make_name', make_name)
def preferred(name_set, attr):
- name = name_set.get(preferred=True)
+ try:
+ name = name_set.get(preferred=True)
+ except:
+ return "[No preferred name]"
if name:
return escape(getattr(name, attr))
else:
diff --git a/src/web/grampsdb/views.py b/src/web/grampsdb/views.py
index eb59e19a3..7e33391c8 100644
--- a/src/web/grampsdb/views.py
+++ b/src/web/grampsdb/views.py
@@ -41,11 +41,11 @@ from django.db.models import Q
#------------------------------------------------------------------------
import web
from web.grampsdb.models import *
-from web.forms import NameForm
+from web.grampsdb.forms import NameForm
_ = lambda text: text
-# Views: [(Nice name plural, /name/handle, Model), ]
+# Views: [(
, //handle, ), ]
VIEWS = [(_('People'), 'person', Name),
(_('Families'), 'family', Family),
(_('Events'), 'event', Event),
@@ -104,6 +104,9 @@ def user_page(request, username):
return render_to_response('user_page.html', context)
def view_name_detail(request, handle, order, action="view"):
+ if order == "add":
+ order = 0
+ action = "add"
if request.POST.has_key("action"):
action = request.POST.get("action")
if action == "view":
@@ -117,15 +120,39 @@ def view_name_detail(request, handle, order, action="view"):
form = NameForm(instance=name)
form.model = name
elif action == "delete":
- pass
+ person = Person.objects.get(handle=handle)
+ person.name_set.get(order=order).delete()
+ action = "back"
elif action == "add":
- pass
+ person = Person.objects.get(handle=handle)
+ name = Name()
+ form = NameForm()
+ form.model = name
+ action = "edit"
+ elif action == "new":
+ person = Person.objects.get(handle=handle)
+ form = NameForm(request.POST)
+ if form.is_valid():
+ name.save()
+ action = "save"
+ else:
+ action = "edit"
elif action == "save":
person = Person.objects.get(handle=handle)
name = person.name_set.get(order=order)
form = NameForm(request.POST, instance=name)
form.model = name
if form.is_valid():
+ # now it is preferred:
+ if form.cleaned_data["preferred"]:
+ # but it wasn't:
+ if not name.preferred:
+ # set all of the other names to be
+ # not preferred:
+ person.name_set.filter(~ Q(id=name.id)) \
+ .update(preferred=False)
+ # else it always was
+ # else some other name is preferred
form.save()
else:
action = "edit"
@@ -144,6 +171,9 @@ def view_name_detail(request, handle, order, action="view"):
context["action"] = "view"
return redirect("/person/%s/name/%d" %
(person.handle, name.order), context)
+ elif action == "back":
+ return redirect("/person/%s/" %
+ (person.handle), context)
else:
return render_to_response(view_template, context)
diff --git a/src/web/utils.py b/src/web/utils.py
index f33171e7f..0b4ad2e2f 100644
--- a/src/web/utils.py
+++ b/src/web/utils.py
@@ -27,6 +27,7 @@
#
#------------------------------------------------------------------------
import web.grampsdb.models as models
+import web.grampsdb.forms as forms
from web import libdjango
from web.djangodb import DjangoDb
from Simple import SimpleTable, SimpleAccess, make_basic_stylesheet
@@ -123,9 +124,9 @@ _ = lambda text: text
def render(formfield, action):
retval = "error"
- name = formfield.name # 'surname'
+ fieldname = formfield.name # 'surname'
if action == "view": # gets the unicode from model
- retval = str(getattr(formfield.form.model, name))
+ retval = str(getattr(formfield.form.model, fieldname))
else: # renders as default
retval = formfield.as_widget()
return retval
@@ -449,8 +450,22 @@ def make_name(name, user):
return "%s, %s" % (surname, "[Living]")
else:
return "%s, %s" % (surname, name.first_name)
+ elif isinstance(name, forms.NameForm):
+ surname = name.model.surname.strip()
+ if not surname:
+ surname = "[Missing]"
+ if user.is_authenticated():
+ return "%s, %s" % (surname, name.model.first_name)
+ else:
+ if probably_alive(name.model.person.handle):
+ return "%s, %s" % (surname, "[Living]")
+ else:
+ return "%s, %s" % (surname, name.model.first_name)
elif name: # name_set
- name = name.get(preferred=True)
+ try:
+ name = name.get(preferred=True)
+ except:
+ return "[No preferred name]"
if name:
return make_name(name, user)
else: