How to test model labels in Django?

Question:

I have the following model.py

from django.db import models

class Url(models.Model):
    short_url = models.CharField(max_length=255)
    original_url = models.CharField(max_length=255)
    clicks = models.IntegerField(default=0)
    created_at = models.DateTimeField('date created', auto_now_add=True)
    updated_at = models.DateTimeField('date updated', auto_now=True)

class Click(models.Model):
    url = models.ForeignKey(Url, on_delete=models.CASCADE, related_name='related_clicks')
    browser = models.CharField(max_length=255)
    platform = models.CharField(max_length=255)
    created_at = models.DateTimeField('date created', auto_now_add=True)
    updated_at = models.DateTimeField('date updated', auto_now=True)

and in the tests/test_models.py

from django.test import TestCase
from heyurl.models import Url, Click
from heyurl.views import short_url


class TestModels(TestCase):
    @classmethod
    def setupTestdata(cls):
        Url.objects.create(short_url='eOlKf', original_url='https://www.google.com', clicks= 2)
    
   #Figuring out how to test each label
    def test_short_url_label(self):
        field_label = Url.objects.get()
        self.assertEqual(field_label, 'short_url')

So basically I would like to know how can I validate my model labels through unit tests in test_models.py What should I use in place of field_label to be able to make use of assertEqual() ?

Asked By: mishsx

||

Answers:

Try this:

expected_fields = [...]
model_field_names = [field.name for field in YourModel._meta.get_fields()]

for field_name in expected_fields:
    self.assertTrue(field_name in model_field_names)
Answered By: Karolis S.
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.