-2

シェルに入ると、次の問題が発生します。

from users.models import Status
from django.utils import timezone

Status.objects.all()
>>> []
p = Status()
p.status_time = timezone.datetime.min
p.status_time
>>> datetime.datetime(1, 1, 1, 0, 0)
p.save()
Status.objects.all()
>>> [<Status: Status object>]
print(Status.objects.all()[0].status_time)
>>> None

status_timeが正しく保存されない理由がわかりません。私のステータスモデルは以下です:

class Status(models.Model):

    status = models.CharField(max_length=200)
    status_time = models.DateTimeField('date published')

    def __init__(self, status = '', time=timezone.datetime.min, *args, **kwargs):
        self.status = status
        self.status_time = time
        super(Status, self).__init__(*args, **kwargs)

誰かがこの動作を説明し、おそらく修正を提案してもらえますか?

4

2 に答える 2

1

前に言いましたが、ドキュメントを読み、チュートリアルに従う必要があります。これは、モデルのフィールドのデフォルト値を設定する方法ではありません。https://docs.djangoproject.com/en/1.5/にあるドキュメントとチュートリアルを参照してください。途中で問題が発生した場合は、戻って質問してください。ただし、間違ったやり方を続けていると、悪い習慣を身につけているだけです。


元のコンテンツは攻撃的に見えるかもしれませんが、それは意図したものではありません。設計された方法とは対照的に、あなたが自分のやり方で物事を行い、その過程で多くの時間を無駄にすることを防ぎたいだけです(私は以前にそれを行いました)。そうは言っても、django の設計者がどのようにモデルをセットアップすることを望んでいたかを実証しようとします。

class Status(models.Model):
    status = models.CharField(max_length=200, null=True, blank=True)
    time = models.DateTimeField('date published', default=timezone.datetime.min)

ご覧のとおり、__init__モデルの作成時に使用されるものはありません。フィールドをプロパティとして指定するだけです。各フィールド タイプには、デフォルト値、max_length などを設定するオプションがいくつかあります。

于 2013-03-29T23:00:21.937 に答える
0

なぜ単純にしないのですか:

クラスステータス(models.Model):

status = models.CharField(max_length=200)
status_time = models.DateTimeField(auto_now_add=True)

Statusインスタンスが作成されると、日時オブジェクトが自動的に追加されます。詳細はこちら

于 2013-03-30T10:50:59.503 に答える