[python] Django 모델 양식 객체의 자동 생성 날짜?

객체의 생성 날짜를 자동으로 설정하는 가장 좋은 방법과 객체가 마지막으로 업데이트 된시기를 기록하는 필드는 무엇입니까?

models.py :

created_at = models.DateTimeField(False, True, editable=False)
updated_at = models.DateTimeField(True, True, editable=False)

views.py :

if request.method == 'POST':
    form = MyForm(request.POST)
    if form.is_valid():
        obj = form.save(commit=False)
        obj.user = request.user
        obj.save()
        return HttpResponseRedirect('obj_list')

오류가 발생합니다.

objects_object.created_at may not be NULL

이 값을 직접 설정해야합니까? 나는에 전달 된 매개 변수의 포인트라고 생각 DateTimeField(또는 그들은 단지 기본값이고, 내가 설정 한 이후로 editable=False그들은 양식에 표시되지 않습니다 따라서 요청에 제출되지 않는, 따라서하지 않는다 양식에 넣습니까?).

가장 좋은 방법은 무엇입니까? __init__방법은?



답변

및에 각각 auto_nowauto_now_add옵션을 사용할 수 있습니다 .updated_atcreated_at

class MyModel(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)


답변

위의 대답은 맞습니다. auto_now_addauto_now 는 그렇게하지만 추상 클래스를 만들고 필요한 필드 created_at와 모든 모델에서 사용하는 것이 좋습니다 updated_at.

class TimeStampMixin(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True

이제 어디서나 사용하고 싶은 간단한 상속을 수행 할 수 있으며 원하는 모델에서 타임 스탬프를 사용할 수 있습니다.

class Posts(TimeStampMixin):
    name = models.CharField(max_length=50)
    ...
    ...

이런 방식으로 Django DRY에서 객체 지향 재사용 성을 활용할 수 있습니다 (반복하지 마십시오)


답변