У меня есть продукт, и я хотел добавить три варианта покупки, которые зависят от покупаемой лицензии.
Например:
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()
Прежде всего, вам нужно оставить Продукт вне лицензий, так как он будет одинаковым для всех моделей ценообразования.
Вы можете хранить информацию о лицензии для пользователя непосредственно в модели пользователя или в какой-либо пользовательской модели, которая назначается пользователю как 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
Спасибо всем, кто ответил. решение было довольно простым. Все было так, как сказал Эмин. Мне нужно сделать лицензирование отдельным классом и ценовым классом продукта с лицензией и ценой. Так что спасибо все работает
Это похоже на ManyToManyField?