Django3.1, queryset 결과 문자열을 변경하는 방법.
아래의 모델에 저장된 MAC 주소는 ‘0021ccd3792f’ 같은 형식으로 일반적으로 표현되는 : 이나 – 이 제거된 형태다.
models.py
class MacTable(models.Model): ... mac = models.CharField(max_length=32, verbose_name='MAC Address.') device = models.ForeignKey( 'NetworkDevice', on_delete=models.CASCADE, verbose_name='Network Device' ) interface = models.CharField(max_length=32, verbose_name='Interface') vlan = models.CharField(max_length=32, verbose_name='VLAN') dropped = models.BooleanField(default=False, verbose_name='Dropped') .... class Meta: verbose_name_plural = 'MAC address table' # unique_together = ('mac', 'device')
이것을 queryset 결과로 템플릿에서 보여주면 ‘0021ccd3792f’ 형식으로 보인다.
이것을 보다 일반적인 ’00:21:cc:d3:79:2f’ 와 같은 형식으로 보여 주려면 몇 가지 방법이 있겠지만, 기존의 queryset이나 view를 수정하지 않고 해당 모델에 아래와 같은 메소드를 추가해 주면 된다.
@property def colon_view_mac(self): tmp = self.mac mac = f'{tmp[0:2]}:{tmp[2:4]}:{tmp[4:6]}:{tmp[6:8]}:{tmp[8:10]}:{tmp[10:12]}' return mac.lower()
그리고, 템플릿 파일을 수정해 준다.
기존의 템플릿에서 mac을 보여주는 부분이 {{ i.mac }} 이었다면, 이 메소드 이름으로 바꿔주면된다.
즉, {{ i.mac }} 을 {{ i.colon_view_mac }} 로 바꿔주면 된다.