Джанго Модель в отношениях один к одному и отображение ее от администратора - PullRequest
2 голосов
/ 02 октября 2009

Для следующих моделей:

class Price:
    cad = models.DecimalField(max_digits=8, decimal_places=2)
    usd = models.DecimalField(max_digits=8, decimal_places=2)

class Product:
    name = models.CharField(max_length=255)
    price = models.ForeignKey(Price)

Для каждого продукта он связан с одним и только одним объектом Price, который будет содержать значение в канадских долларах или долларах США. Является ли вышеизложенное правильным способом установления таких отношений? Вот некоторые примеры данных:

Shirt, $100 US, $120 CAD
Book, $20 US, $25 CAD

Я также хочу ввести вышеуказанную информацию от администратора, чтобы интерфейс был похож на следующее:

Добавить товар:

  • Имя:
  • CAD:
  • USD:

Я могу более или менее сделать это с помощью следующего кода:

class ProductInline(admin.StackedInline):
    model = Product

class PriceAdmin(admin.ModelAdmin):
    inlines = [
        ProductInline,
    ]

Правильно ли я это делаю?

Ответы [ 2 ]

1 голос
/ 02 октября 2009

Почему бы просто не сделать поля cad и usd членами таблицы Product? Таким образом, вы получаете админское совершенство бесплатно. Что вы получаете от того, что они хранятся в отдельной модели?

Кроме того, почему бы просто не хранить только одну цену и иметь обменный курс (я не знаю, соответствует ли это вашей модели ценообразования, но, похоже, из приведенного вами примера). Таким образом, вам просто нужно будет ввести одну цену, и другие биты вашей системы могут отображать цену в другой валюте, если это необходимо.

Я делаю то же самое с тегом шаблона для управления отображением денежных значений в данной валюте в соответствии с переменной сеанса (см. вопрос, который я задал , когда застрял).

0 голосов
/ 02 октября 2009

Я думаю, что вы должны использовать отношения one2one

class Price:
    cad = models.DecimalField(max_digits=8, decimal_places=2)
    usd = models.DecimalField(max_digits=8, decimal_places=2)

class Product:
    name = models.CharField(max_length=255)
    price = models. OneToOneField(Price, primary_key=True)

http://www.djangoproject.com/documentation/models/one_to_one/

...