Как добавить 3 разные лицензии с 3 разными ценами в моделях django

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

Например:

class Product(models.Model):
    productname = models.CharField(max_length=200)
    license  = models.????
Здесь должен быть мультиселектор, чтобы выбрать все три лицензии, если применимо. Но как?
discription = models.TextField()
image = models.CharField(max_length=5000, null=True, blank=True)

class License(models.Model):
Здесь должно быть какое-то поле выбора, связывающее цену с выбор.... но как???

Помоги пожалуйста. Я пробовал это, и это не сработало

class Song(models.Model):
    class License(models.IntegerChoices):
        BASIC = 35
        PREMIUM = 50
        PROFESSIONAL = 150
        FREE = 0

    license = models.IntegerField(choices=License.choices,  default='License.FREE') 
    album = models.ForeignKey(Album, on_delete=models.CASCADE)
    artist = models.ForeignKey(Artist, blank=True, on_delete=models.CASCADE)
    title = models.CharField(max_length=254)
    description = models.TextField()

Это похоже на ManyToManyField?

Willem Van Onsem 18.12.2020 21:15
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
1
176
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Прежде всего, вам нужно оставить Продукт вне лицензий, так как он будет одинаковым для всех моделей ценообразования.

Вы можете хранить информацию о лицензии для пользователя непосредственно в модели пользователя или в какой-либо пользовательской модели, которая назначается пользователю как OneToOne и содержит дополнительные поля для этого пользователя.

Для ценообразования вы просто определите разные цены для каждой лицензии и продукта. Чтобы упростить задачу, вы можете добавить ProductPrice в качестве inline для Product администратора.

class Product(models.Model):
    ...product related fields here like name and etc.
    default_price = models.FloatField("Default price", default=0.0)

    def user_price(self, user):
        """Will return ProductPrice model or None if there is no results."""
        return self.prices.filter(license=user.license).first()


class License(models.Model):
    """
    I would recommend using a custom user model or OneToOne model where you can
    assign which license the user have and use `user.license` for that license
    value or user.information.license if you use OneToOne model.
    """
    ...fields related to the License definition only.


class ProductPrice(models.Model):
    product = models.ForeignKey(
        Product, on_delete=models.CASCADE, related_name = "prices"
    )
    license = models.ForeignKey(
        License, on_delete=models.CASCADE, related_name = "prices"
    )
    price = models.FloatField("Price", default=0.0)
    ...other fields related to license pricing if you need

Спасибо всем, кто ответил. решение было довольно простым. Все было так, как сказал Эмин. Мне нужно сделать лицензирование отдельным классом и ценовым классом продукта с лицензией и ценой. Так что спасибо все работает

Другие вопросы по теме