programing

Django 모델 폼 객체의 자동 생성 날짜

projobs 2022. 9. 22. 22:10
반응형

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__방법?

및 옵션을 사용할 수 있습니다.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_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에서 객체 지향의 재사용성을 활용할 수 있습니다(반복하지 말 것).

언급URL : https://stackoverflow.com/questions/3429878/automatic-creation-date-for-django-model-form-objects

반응형