Django 인스타그램 글에 기간 설정하기
2022. 2. 21. 18:00ㆍ카테고리 없음
반응형
장고(Django)를 배우기 시작한 입문자이시거나, 또는 배우고 싶은 생각이 있으신 분은 위 출처의 강의를 적극 추천드립니다!!!
Django 인스타그램 포스팅 글에 기간 설정하기
#insta/models.py
# auto_now_add 는 생성 시간이 자동으로 DB에 저장된다.
created_at = models.DateField(auto_now_add=True)
# auto_now는 수정 시간이 DB에 자동으로 저장된다.
updated_at = models.DateField(auto_now=True)
# 생성 시각 필드를 만들어준다.
_ 위 필드들과 같이 매번 모델에 들어가는 필드들이면 부모 추상 클래스를 통해서 코드 작성 시간을 줄일 수 있다.
class BaseModel(models.Model):
class Meta:
# 아래 코드를 통해 실제 DB에 적용되지 않고, 추상 클래스로 만들어진다.
abstract = True
class Post(BaseModel):
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
photo = models.ImageField(upload_to="insta/post/%Y%m%d")
# 내용
caption = models.TextField()
tag_set = models.ManyToManyField('Tag', blank=True)
location = models.CharField(max_length=100)
created_at = models.DateField(auto_now_add=True)
updated_at = models.DateField(auto_now=True)
_후 Terminal에서 아래와 같이 필수 필드 여부에 대해서 작성해준다.
(django_instagram) C:\django_instagram>python manage.py makemigrations insta
You are trying to add the field 'created_at' with 'auto_now_add=True' to post without a default; the database needs something to populate existing rows.
1) Provide a one-off default now (will be set on all existing rows)
2) Quit, and let me add a default in models.py
Select an option: 1
Please enter the default value now, as valid Python
You can accept the default 'timezone.now' by pressing 'Enter' or you can provide another value.
The datetime and django.utils.timezone modules are available, so you can do e.g. timezone.now
Type 'exit' to exit this prompt
[default: timezone.now] >>> timezone.now
Migrations for 'insta':
insta\migrations\0004_auto_20220221_1747.py
- Add field created_at to post
- Add field updated_at to post
# timezone.now를 default 값으로 넣어준다는 의미이다.
#insta/views.py
from datetime import timedelta
from django.utils import timezone
@login_required
def index(request):
# 현재를 기준으로 3일 이내라면
timesince = timezone.now() - timedelta(days=3)
# TimeLine에 Follow하는 유저들의 포스팅 만을 노출하기
post_list = Post.objects.all()\
.filter(
Q(author=request.user) |
Q(author__in=request.user.following_set.all())
)\
.filter(
created_at__lte = timesince # 3일 이내의 게시글
#created_at__gte = timesince # 3일 이외의 게시글
)
https://velog.io/@may_soouu/Django-%EB%A9%94%EC%86%8C%EB%93%9C-%EC%A0%95%EB%A6%AC
https://www.slideshare.net/EunhyangKim2/ss-118560530
반응형