객체의 생성 날짜를 자동으로 설정하는 가장 좋은 방법과 객체가 마지막으로 업데이트 된시기를 기록하는 필드는 무엇입니까?
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_now
및 auto_now_add
옵션을 사용할 수 있습니다 .updated_at
created_at
class MyModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
답변
위의 대답은 맞습니다. auto_now_add 와 auto_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에서 객체 지향 재사용 성을 활용할 수 있습니다 (반복하지 마십시오)