Как писать динамические модели Django? - PullRequest
1 голос
/ 05 февраля 2010

что я хочу, так это получать советы по определению повторно используемой модели продукта для приложения торгового сайта. В настоящее время я знаю, что магазин будет торговаться с «одеждой», поэтому у модели продукта будет «сезон». или коллекции "отношения, но в будущем я должен использовать это приложение для торговли с продуктом X, например:" автомобили ", которые имеют отношения" механические характеристики ".

Итак, я размышляю в метамоделях, создавая общую модель, определяемую ключом / ценностями, но как сделать отношения?.

Но вы - экспертное сообщество, и я надеюсь, что вы поможете мне увидеть больше.

Ответы [ 2 ]

3 голосов
/ 05 февраля 2010

Один из способов определения отношений между одним объектом и многими другими типами объектов - это использование GenericForeignKey и ContentType framework . Я предполагаю, что вы будете искать Product с более конкретным связанным объектом, таким как Jacket. Это может выглядеть примерно так:

class Product(models.Model):
    price = models.FloatField()
    description = models.TextField()
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    details = generic.GenericForeignKey('content_type', 'object_id')

class Jacket(models.Model):
    size = models.PositiveIntegerField()
    color = models.CharField(max_length=25)

Это позволяет вам определить любое количество моделей, подобных Jacket, которое может быть связано с вашим продуктом.

jacket = Jacket(size=69, color="pink")
jacket.save()
prod = Product(price=0.99)
prod.details = jacket  # It's like magic!
prod.save()

Это создает дополнительную работу по созданию тонны моделей, но также позволяет вам быть очень креативным с тем, какие данные вы храните и как вы их храните.

0 голосов
/ 05 февраля 2010

Один из популярных вариантов - использовать что-то вроде тегов. Таким образом, у вас есть материал, который является общим для всех предметов, например, идентификатор товара, имя, описание, цена. Тогда у вас будет несколько более общих тегов или описанных тегов в другой таблице, связанных с этими элементами. У вас может быть тег, который представляет сезон или технические характеристики автомобиля и т. Д. *

Конечно, это действительно зависит от того, как вы спроектируете систему, чтобы справиться с этой дополнительной информацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...