2

時間の長さに対応した商品(新聞購読)を設定しようとしています。

クライアントにDjangoAdminを使用して製品タイプ(さまざまなサブスクリプションの長さ)を追加してもらいますが、時間の値(52週間、26週間、 1週間など)。週刊の論文もあれば、毎日の論文もあるので、長さを日または週のどちらかで選択できるようにしたいと思います。

現在、私の製品モデルは次のとおりです。

class Product(models.Model):
    product_type = models.CharField(max_length=100)
    product_description = models.CharField(max_length=255)
    product_cost = models.DecimalField(decimal_places=2, max_digits=4)
    product_active = models.BooleanField()
    def get_absolute_url(self):
        return "/signup/%i/" % self.id
    def __unicode__(self):
        return self.product_type

product_typeを、ユーザーが時間の値を定義できるオブジェクト型にする方法はありますか?

ありがとう、

アンソニー

4

2 に答える 2

4

1つの数値と数値が表すものの選択の2つの値を格納する方が簡単だと思います。

duration = models.IntegerField()
duration_type = models.CharField(max_length=32, choices=[
    ("day", "Days"),
    ("week", "Weeks")])

別のサブスクリプションモデルがあると仮定すると、そのモデルの有効期限をメソッドとして計算できます。

class Subscription(models.Model):
    product = models.ForeignKey(Product)
    starts = models.DateField()
    def expires(self):
        from datetime import timedelta
        if self.product.duration_type == "day":
            days = self.product.duration
        elif self.product.duration_type == "week":
            days = self.product.duration * 7
        return self.starts + timedelta(days=days)
于 2012-04-18T16:26:50.690 に答える
0

サブスクリプションの開始と終了を説明するDateTimeモデルフィールドをいくつか追加できます。ある日時を他の日時から引くことにより、タイムデルタを返すモデルのメソッドを作成できます。

class Product(models.Model):
    product_type = models.CharField(max_length=100)
    product_description = models.CharField(max_length=255)
    product_cost = models.DecimalField(decimal_places=2, max_digits=4)
    product_active = models.BooleanField()

    subscription_start = models.DateTimeField()
    subscription_end = models.DateTimeField()

    def get_duration(self):
        # returns a timedelta
        return self.subscription_end - self.subscription_start

    def get_absolute_url(self):
        return "/signup/%i/" % self.id
    def __unicode__(self):
        return self.product_type

例えば:

>> import datetime
>> d1 = datetime.datetime(1986,14,05,0,0,0)
>> d2 = datetime.datetime.now()
>> print d2 - d1
9471 days, 17:24:31

そのタイムデルタを使用して、ビューで計算を行うことができます

于 2012-04-18T16:29:40.103 に答える