본문 바로가기

Django

Compile Language & Interpreter Language

반응형

내가 익숙한 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