post를 비동기 방식으로 json 객체로 받아오기 때문에 author의 user name이랑 author의 프로필 사진을 같이 받아올 필요성이 있었다. serializer의 기본 설정을 사용한다면 foreign key 관계인 author는 id만 가져온다. 그러나 아래처럼 natural_key를 설정해주면 특정 필드 값들을 원하는 만큼 tuple로 리턴해줄 수 있다. rest framework 없이도 가능하다.
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
pic = models.ImageField(default="profile-default.svg")
friend = models.ManyToManyField('self', blank=True)
group = models.ManyToManyField(Group, blank=True)
def __str__(self):
return str(self.user)
def natural_key(self):
return (str(self.user), self.pic.url)
class Post(models.Model):
content = models.TextField()
created_date = models.DateTimeField(auto_now_add=True)
likes = models.PositiveIntegerField(default=0)
liked = models.ManyToManyField(Profile, blank=True, related_name='liked')
author = models.ForeignKey(Profile, null=True, on_delete=models.CASCADE)
class Meta:
ordering = ['-created_date']
그리고 serializer에 키워드 매개변수로 use_natural_foreign_key=True 를 사용해줘야 한다.
data = serializers.serialize('json', Post.objects.all()[from_pk:from_pk+10],\
use_natural_foreign_keys=True)
이제 json 객체에 user name, pic.url이 같이 실려 보내진다.
'django' 카테고리의 다른 글
visual studio code 쓰면 python manage.py runserver 안 쳐도 된다 (0) | 2021.01.31 |
---|---|
visual stuido code 파이썬 가상환경 설정부터 startproject까지 (0) | 2021.01.31 |
순수 django + vue template을 사용하여 비동기로 게시물 불러오기, 좋아요 처리 (0) | 2020.12.28 |
현재 user를 필드 값으로 넣고 싶을 때 (0) | 2020.12.28 |
django에 react나 vue를 결합시켜야 하는가? (0) | 2020.12.25 |