# -*- coding: utf-8 -*-
from django.db import models
from django_extensions.db.fields import CreationDateTimeField
from django_extensions.db.fields import ModificationDateTimeField
from jrlib.models import JRModel

# Адрес
class AddressCountry(JRModel):
    name = models.CharField(max_length = 255)

class AddressRegion(JRModel):
    country = models.ForeignKey(AddressCountry)
    name = models.CharField(max_length = 255)

class AddressCity(JRModel):
    region = models.ForeignKey(AddressRegion)
    name = models.CharField(max_length = 255)

# Пользователь
class User(JRModel):
    city = models.ForeignKey(AddressCity)

    first_name = models.CharField(max_length = 255)
    second_name =  models.CharField(max_length = 255)
    nick = models.CharField(max_length = 255)
    email = models.EmailField()

# Базовый класс (без создания таблицы) для любых "авторских" 
# таблиц, т.е., у записей которых есть автор из Users

class AuthoredModel(JRModel):
    author = models.ForeignKey(User, related_name='+')
    cr_date = CreationDateTimeField()
    up_date = ModificationDateTimeField()

    class Meta:
        abstract = True


# проект — собсно, игра
class Project(AuthoredModel):
    name = models.CharField(max_length = 1023)
    # TODO

# Права доступа к проекту
class ProjectAcl(JRModel):
    project = models.ForeignKey(Project)

# Группы полей заявок в проекте
class ProjectFieldGroup(JRModel):
    project = models.ForeignKey(Project)

# Поля заявки в проекте
class ProjectField(JRModel):
    project = models.ForeignKey(Project)
    project_field_group = models.ForeignKey(ProjectFieldGroup, blank=True, null=True)

# Значения комбобоксов в полях заявок в проекте
class ProjectFieldValue(JRModel):
    project_field = models.ForeignKey(ProjectField)

# Объекты игрового мира — персонажики, группочки персонажиков, локации
class Object(AuthoredModel):
    project = models.ForeignKey(Project)

    name = models.CharField(max_length=1023)

# История изменений в объектах
class ObjectHistory(AuthoredModel):
    obj = models.ForeignKey(Object)

# Подписки пользователей на изменения
class Subscription(AuthoredModel):
    user = models.ForeignKey(User)
    # TODO

# Заявка
class Claim(AuthoredModel):
    obj = models.ForeignKey(Object)

# история изменения заявок
class ClaimHistory(AuthoredModel):
    claim = models.ForeignKey(Claim)

# Комментарии к заявке (переписка)
class ClaimComment(AuthoredModel):
    claim = models.ForeignKey(Claim)

# Загрузы
class StoryPiece(AuthoredModel):
    obj = models.ForeignKey(Object)

# История изменения загрузов
class StoryPieceHistory(AuthoredModel):
    story_piece = models.ForeignKey(StoryPiece)



@@ -284,32 +284,80 @@
 ax_length = 255)
+%0A    def __str__(self):%0A        return self.name
 %0A%0Aclass AddressR
@@ -465,16 +465,64 @@
 h = 255)
+%0A    def __str__(self):%0A        return self.name
 %0A%0Aclass 
@@ -589,16 +589,16 @@
 Region)%0A
-
     name
@@ -634,16 +634,64 @@
 h = 255)
+%0A    def __str__(self):%0A        return self.name
 %0A%0A# %D0%9F%D0%BE%D0%BB%D1%8C

Add __str__ for geographic objects