簡體   English   中英

如何在Django模型中測試related_name?

[英]How to test related_name in django model?

我有一個模型:

@python_2_unicode_compatible
class TelegramUser(models.Model):

    user = models.OneToOneField(settings.AUTH_USER_MODEL, null=True, verbose_name=_('User'), related_name='telegramuser', on_delete=models.CASCADE)
    token = models.CharField(max_length=255, verbose_name=_('Token'))
    chat_id = models.CharField(max_length=255, verbose_name=_('Chat id'), null=True, blank=False)

我需要為該模型的每個字段測試verbose_namerelated_name

所以我正在測試verbose_name

def test_user_label(self):
    field_label = self.telegramuser._meta.get_field('user').verbose_name
    self.assertEquals(field_label,'User')

但是,如果我嘗試測試“ related_name”,則會收到如下錯誤:

AttributeError: 'OneToOneField' object has no attribute 'related_name'

但是,此問題不是由於該字段是OneToOne

文檔中 ,我只找到了如何檢查related_model

>>> field = user._meta.get_field('user')
>>> print(field.related_model)
<class 'django.contrib.auth.models.User'>

但是我從來沒有找到一種方法來測試related_name

User模型上,您可以檢查反向關系:

self.assertEquals(User._meta.get_field('telegramuser').related_name, 'telegram_user')

但是,正如Daniel在評論中所說,該測試沒有用。 Django應該已經測試了related_nameverbose_name工作。 最多,您可能會有一個測試,該測試創建一個用戶和電報用戶,然后使用user.telegramuser來確保您可以向后跟蹤一對一字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM