![](/img/trans.png)
[英]Django: How to create a dynamic related_name for an inherited parent model?
[英]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_name
和related_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_name
和verbose_name
工作。 最多,您可能会有一个测试,该测试创建一个用户和电报用户,然后使用user.telegramuser
来确保您可以向后跟踪一对一字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.