Есть модели описывающие параметры автомобиля (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)
user = model.ForeingKey(User)
Так же эта привязка есть в модели “Car”, если необходимо получить все машины для пользователя.
Как можно оптимизировать дизайн модели, для исключения повторяющихся связей?
У меня есть такой вариант:
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)
Привязку к “User” в модели “Car” я оставил, что бы можно было получить все автомобили пользователя.
Как еще можно оптимизировать?