반응형
내가 익숙한 complie Language는 Java 언어 & Spring Framework 이다.
올해 계속 새로운 Language인 python & Django를 이용해서 사이트를 제작하는 중이다.
Compile 언어는 Source 파일 내에서 순서가 중요하지 않았다.
왜냐하면 Compiler가 Source를 Compile 함으로써 실행을 위한 파일을 생성할 때 앞뒤를 잘 맞춰서 만들어주기 때문인다.
하지만 javascript 처럼 Python도 interpreter 언어이다.
그래서 파일 내에서의 순서가 중요하다.
아래와 같이 작성하면 Unresolved reference 'Category' 에러가 발생한다.
from django.db import models
# Create your models here.
from django.db import models
from django.contrib.auth.models import User
import os
class Post(models.Model):
title = models.CharField(max_length=30)
hook_text = models.CharField(max_length=100, blank=True)
content = models.TextField()
head_image = models.ImageField(upload_to='blog/images/%Y/%m/%d/', blank=True)
file_upload = models.FileField(upload_to='blog/files/%Y/%m/%d/', blank=True)
create_at = models.DateTimeField(auto_now_add=True)
update_at = models.DateTimeField(auto_now=True)
author = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
category = models.ForeignKey(Category, null=True, on_delete=models.SET_NULL)
def __str__(self):
return f'[{self.pk}]{self.title} :: {self.author}'
def get_absolute_url(self):
return f'/blog/{self.pk}/'
def get_file_name(self):
return os.path.basename(self.file_upload.name)
def get_file_ext(self):
return self.get_file_name().split('.')[-1]
class Category(models.Model):
name = models.CharField(max_length=50, unique=True)
slug = models.SlugField(max_length=200, unique=True, allow_unicode=True)
def __str__(self):
return self.name
이렇게 작성하면 에러가 해결 된다.
from django.db import models
# Create your models here.
from django.db import models
from django.contrib.auth.models import User
import os
class Category(models.Model):
name = models.CharField(max_length=50, unique=True)
slug = models.SlugField(max_length=200, unique=True, allow_unicode=True)
def __str__(self):
return self.name
class Post(models.Model):
title = models.CharField(max_length=30)
hook_text = models.CharField(max_length=100, blank=True)
content = models.TextField()
head_image = models.ImageField(upload_to='blog/images/%Y/%m/%d/', blank=True)
file_upload = models.FileField(upload_to='blog/files/%Y/%m/%d/', blank=True)
create_at = models.DateTimeField(auto_now_add=True)
update_at = models.DateTimeField(auto_now=True)
author = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
category = models.ForeignKey(Category, null=True, on_delete=models.SET_NULL)
def __str__(self):
return f'[{self.pk}]{self.title} :: {self.author}'
def get_absolute_url(self):
return f'/blog/{self.pk}/'
def get_file_name(self):
return os.path.basename(self.file_upload.name)
def get_file_ext(self):
return self.get_file_name().split('.')[-1]
Interpreter 언어는 순서가 중요하다.
반응형
'Django' 카테고리의 다른 글
Python strip() (0) | 2022.02.24 |
---|---|
Django Shell Plus (0) | 2022.02.22 |
Django 일부만 Test 하기 (0) | 2022.02.20 |
Django TDD beautifulsoup4 사용하기 (0) | 2022.02.19 |
Pillow Python에서 ImageField를 사용하기 (0) | 2022.02.19 |