Может ли одна песочница иметь много предметов, или у одного предмета много песочниц?Может ли элемент принадлежать нескольким песочницам одновременно?
Я думаю, вы хотите, чтобы в одной песочнице содержалось много элементов:
class Sandbox(models.Model):
name = models.CharField()
class Item(models.Model):
name = models.CharField()
sandbox= models.ForeignKey(Sandbox)
attributes = models.ManyToManyField('Attribute')
Тот же самый анализ верен здесь:
один атрибут имеет много типов атрибутов, или один тип атрибута имеет много атрибутов?
Здесь у вас есть правильное отношение, я просто изменил порядок моделей
class AttributeType(models.Model):
name = models.CharField()
class Attribute(models.Model):
name = models.CharField()
type = models.ForeignKey(AttributeType)
Таким образом, у каждого элемента естьатрибут, и они всегда наделены этими атрибутами, цветом и формой.
Хотя у вас может быть таблица с данными, которые выглядят так:
pk type
1 green
2 circular
etc
Лично я бы этого не сделал,потому что я думаю, что данные, которые логически одинаковы, должны быть сгруппированы вместе.Фигуры имеют разные атрибуты, чем цвета.Например, чтобы проиллюстрировать мою точку зрения, что если вы хотите RGB цвета?Тогда у вас будут дополнительные столбцы для фигур, когда они не нужны, и это сбивает с толку.То же самое верно в обратном, цвета не имеют размерности.
Вместо этого я мог бы сделать что-то вроде:
class Color(models.Mode):
#info about colors
class Shape(models.Mode):
#info about shapes
class Item(models.Model):
name = models.CharField()
sandbox= models.ForeignKey(Sandbox)
color= models.ForeignKey(Color)
shape= models.ForeignKey(Shape)
Это также гарантирует, что у вас есть только один выбор, потому что ForeignKey вdjango.Forms по умолчанию использует ChioceField (iirc).
Что касается переопределения этого и создания его радиокнопки, просто просмотрите документы здесь:
https://docs.djangoproject.com/en/dev/ref/forms/widgets/