Форум сайта python.su
0
Привет.
Есть модели описывающие параметры автомобиля (Car):
цвет (Color), тип машины (CarType), скорость (Speed), руль (Handlebar).
class Car(models.Model):
user = model.ForeingKey(User)
name = models.CharField(max_lenght=250)
color = models.ManyToManyField('CarColor', blank=True, null=True)
type = ForeingKey('CarType', blank=True, null=True)
max_speed = ForeingKey('Speed', blank=True, null=True)
left_rigt = ManyToManyField('Handlebar', blank=True, null=True)
class Color(models.Model):
user = model.ForeingKey(User)
color = models.CharField(max_lenght=10)
class CarType(models.Model):
user = model.ForeingKey(User)
type = models.CharField(max_lenght=10)
class Speed(models.Model):
user = model.ForeingKey(User)
speed = models.IntegerField()
class Handlebar(models.Model):
user = model.ForeingKey(User)
ATTR_CHOICES = (
(1, u'Left'),
(2, u'Right'),
)
handlebar = models.IntegerField(choices=ATTR_CHOICES)
class Car(models.Model):
user = model.ForeingKey(User)
attribute = model.ForeingKey('Attribute', blank=True, null=True)
name = models.CharField(max_lenght=250)
class Attribute(models.Model):
user = model.ForeingKey(User)
name = models.CharField(max_lenght=10)
color = models.ManyToManyField('CarColor', blank=True, null=True)
type = ForeingKey('CarType', blank=True, null=True)
max_speed = ForeingKey('Speed', blank=True, null=True)
left_rigt = ManyToManyField('Handlebar', blank=True, null=True)
class Color(models.Model):
color = models.CharField(max_lenght=10)
class CarType(models.Model):
type = models.CharField(max_lenght=10)
class Speed(models.Model):
speed = models.IntegerField()
class Handlebar(models.Model):
ATTR_CHOICES = (
(1, u'Left'),
(2, u'Right'),
)
handlebar = models.IntegerField(choices=ATTR_CHOICES)
Офлайн
0
Раз атрибуты описывают машину, то с машиной И ТОЛЬКО с машиной связывать и надо. Никак не с человеком.
Связывайте только с машиной.
Офлайн
9
Сделайте одну абстрактную модель и в ней сделайте привязку к пользователю. Остальные модели наследуйте от нее.
https://docs.djangoproject.com/en/1.3/topics/db/models/#abstract-base-classes
А вообще, зачем в моделях Color, Handlebar,… поле user? У каждого пользователя будут свои цвета, …? По крайней мере в HandleBar поле user не нужно, я думаю.
Расскажите немного поподробнее о задаче которую решаете.
Отредактировано (Сен. 26, 2011 12:16:15)
Офлайн
0
svas, Поле “user”, в моделях “Color”, “Handlebar”, “CarType” и “Speed” сделано для того, чтобы авторизированный пользователь мог посмотреть, какие параметры машин он добавил. А именно цвета, рули, тип машины и скорость.
Без привязки к конкретному автомобилю!
Можно было оставить поле “User”, только в модели “Car”, но тогда чтобы получить параметры машины для пользователя, пришлось бы парсить таблицу Car где указан данный пользователь и дальше уже читать параметры из “Color”, “Handlebar”, “CarType” и “Speed”.
Задача сделать сайт по аренде машин.
maxwell, а как в этом случае узнать, какие параметры добавил авторизированный пользоваль?
У авторизированного пользователя в его админке, должно быть 4 таблицы:
Цвета (Color), Рули (Handlebar), Скорость (Speed) и Тип машины (CarType).
в каждой из таблиц должно быть выведено все, что добавил пользователь, без привязки к определенной машине!
Пример:
Color: Handlebar: Speed CarType
красный левый 150 легковая
синий правый 180 фура
и т.д. и т.д.
Отредактировано (Сен. 26, 2011 12:52:48)
Офлайн
0
Kotakota, что-то с архитектурой не то.
Пользователь может вводить свои какие-то параметры машины (которые никак не связаны с конкретной машиной).
Так же пользователь может заводить машины (бгыы, каламбур) у которых так же есть свои параметры.
Добавил я себе:
Color: Handlebar: Speed CarType
красный левый 150 легковая
синий правый 180 фура
Потом добавил машину:
Color: Handlebar: Speed CarType
желтый левый 150 легковая
Что должно произойти в таком случае?
Отредактировано (Сен. 26, 2011 13:03:05)
Офлайн
0
maxwell, он может вводить параметры, но привязывать их (сразу) к конкретной машине пользователь не обязан.
Он может зайти в другой раз, например, изменить параметр “желтый” на “красный”, а потом привязать их к модели “Car”.
Вопрос в том, как получить введенные конкретным пользователем, но пока не привязанные к сущности “Car”, параметры.
Офлайн
0
Kotakota, тогда, так как у вас сейчас будет нормально.
Офлайн