From edcfa1b049cf9312fa5659918a6f03b3e9fae33f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rapha=C3=ABl=20Barrois?= Date: Sat, 30 Mar 2013 01:06:19 +0100 Subject: [PATCH] Add xnet.profiles. --- xnet/profiles/__init__.py | 0 xnet/profiles/admin.py | 41 +++++++++++++++++++++ xnet/profiles/models.py | 90 +++++++++++++++++++++++++++++++++++++++++++++++ xnet/settings/base.py | 2 +- 4 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 xnet/profiles/__init__.py create mode 100644 xnet/profiles/admin.py create mode 100644 xnet/profiles/models.py diff --git a/xnet/profiles/__init__.py b/xnet/profiles/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/xnet/profiles/admin.py b/xnet/profiles/admin.py new file mode 100644 index 0000000..b2fce72 --- /dev/null +++ b/xnet/profiles/admin.py @@ -0,0 +1,41 @@ +from django.contrib import admin + +from . import models + + +class LanguageAdmin(admin.ModelAdmin): + list_display = ['iso_code', 'name'] + search_fields = ['iso_code', 'name'] + +admin.site.register(models.Language, LanguageAdmin) + + +class CountryAdmin(admin.ModelAdmin): + list_display = ['iso_code', 'name', 'main_language'] + search_fields = ['iso_code', 'name'] + +admin.site.register(models.Country, CountryAdmin) + + +class ProfileAdmin(admin.ModelAdmin): + list_display = ['account', 'native'] + search_fields = ['account__first_name', 'account__last_name', 'account__username'] + +admin.site.register(models.Profile, ProfileAdmin) + + +class AddressAdmin(admin.ModelAdmin): + list_display = ['street', 'building', 'city', 'locality', 'zipcode', 'city', 'country'] + search_fields = ['street', 'city', 'zipcode', 'city', 'country__name'] + list_filter = ['country'] + +admin.site.register(models.Address, AddressAdmin) + + +class ProfileAddressAdmin(admin.ModelAdmin): + list_display = ['profile', 'address', 'rank'] + search_fields = ['profile__account__first_name', 'profile__account__last_name', 'profile__account__username', + 'address__street', 'address__city', 'address__zipcode', 'address__country__name'] + list_filter = ['address__country'] + +admin.site.register(models.ProfileAddress, ProfileAddressAdmin) diff --git a/xnet/profiles/models.py b/xnet/profiles/models.py new file mode 100644 index 0000000..c6c067b --- /dev/null +++ b/xnet/profiles/models.py @@ -0,0 +1,90 @@ +# -*- coding: utf-8 -*- + +from django.db import models +from django.utils.translation import ugettext_lazy as _ + +from xnet.accounts import models as accounts_models + + +class Language(models.Model): + iso_code = models.CharField(max_length=2, unique=True, verbose_name=_(u"code ISO")) + name = models.CharField(max_length=30, unique=True, verbose_name=_(u"nom")) + + class Meta: + verbose_name = _(u"langue") + verbose_name_plural = _(u"langues") + + def __unicode__(self): + return u"%s (%s)" % (self.name, self.iso_code) + + +class Country(models.Model): + iso_code = models.CharField(max_length=2, unique=True, verbose_name=_(u"code ISO")) + name = models.CharField(max_length=30, unique=True, verbose_name=_(u"nom")) + main_language = models.ForeignKey(Language, blank=True, null=True, + verbose_name=_(u"langue principale"), related_name='countries') + + class Meta: + verbose_name = _(u"pays") + verbose_name_plural = _(u"pays") + + def __unicode__(self): + return u"%s (%s)" % (self.name, self.iso_code) + + +class Address(models.Model): + text = models.TextField(verbose_name=_(u"texte")) + postal_text = models.TextField(verbose_name=_(u"texte postal")) + + latitude = models.FloatField(verbose_name=_(u"latitude")) + longitude = models.FloatField(verbose_name=_(u"longitude")) + + street = models.CharField(max_length=100, verbose_name=_(u"rue")) + building = models.CharField(max_length=100, blank=True, verbose_name=_(u"bâtiment")) + locality = models.CharField(max_length=100, blank=True, verbose_name=_(u"lieu-dit")) + zipcode = models.SlugField(max_length=10, verbose_name=_(u"code postal")) + city = models.CharField(max_length=100, verbose_name=_(u"ville")) + country = models.ForeignKey(Country, related_name='adresses', verbose_name=_(u"pays")) + + class Meta: + verbose_name = _(u"adresse") + verbose_name_plural = _(u"adresses") + + def __unicode__(self): + building_part = u"(%s) " if self.building else u"" + locality_part = u"%s, " if self.locality else u"" + return u"%(street)s %(building)s%(locality)s, %(zipcode)s %(city)s, %(country)s" % dict( + street=self.street, + building=building_part, + locality=locality_part, + zipcode=self.zipcode, + city=self.city, + country=self.country.name, + ) + + +class Profile(models.Model): + account = models.OneToOneField(accounts_models.Account, + related_name='profile', verbose_name=_(u"Profile")) + native = models.BooleanField(verbose_name=_(u"Native user"), + help_text=_(u"Marks a user as 'native', i.e belonging to the current organization.")) + + nationality = models.ForeignKey(Country, related_name='nationals', verbose_name=_(u"nationalité")) + alt_nationality = models.ForeignKey(Country, related_name='alt_nationals', verbose_name=_(u"autre nationalité")) + + def __unicode__(self): + return unicode(self.account) + + +class ProfileAddress(models.Model): + profile = models.ForeignKey(Profile, related_name='addresses', verbose_name=_(u"profil")) + address = models.ForeignKey(Address, related_name='profiles', verbose_name=_(u"adresse")) + rank = models.IntegerField(verbose_name=_(u"rank")) + + class Meta: + verbose_name = _(u"adresse d'un profil") + verbose_name_plural = _(u"adresses de profils") + unique_together = ('profile', 'rank') + + def __unicode__(self): + return u"%s of %s" % (self.rank, self.profile) diff --git a/xnet/settings/base.py b/xnet/settings/base.py index 6d53eb3..1025a8f 100644 --- a/xnet/settings/base.py +++ b/xnet/settings/base.py @@ -155,7 +155,7 @@ INSTALLED_APPS = ( 'xnet.groups', 'xnet.news', 'xnet.events', - 'xnet.example', + 'xnet.profiles', ) # A sample logging configuration. The only tangible logging -- 2.1.4