使用._meta Django

时间:2017-05-08 11:35:23

标签: python django

我想问一下在这段代码中使用._meta的问题?我没有找到解释使用.meta

的文档
def resend_activation_email(self, request, queryset):
    """
    Re-sends activation emails for the selected users.

    Note that this will *only* send activation emails for users
    who are eligible to activate; emails will not be sent to users
    whose activation keys have expired or who have already
    activated.

    """
    if Site._meta.installed:
        site = Site.objects.get_current()
    else:
        site = RequestSite(request)

    for profile in queryset:
        if not profile.activation_key_expired():
            profile.send_activation_email(site)
resend_activation_email.short_description = _("Re-send activation emails")

1 个答案:

答案 0 :(得分:0)

您也可以在测试中使用 ._meta

考虑以下models.py

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User

class Post(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=100)
    content = models.TextField()
    published = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f"{self.author} {self.title} {self.content}"

您可以使用 ._meta 来验证帖子的标签名称(在 test_models.py 中),例如:

from datetime import datetime

from django.test import TestCase
from django.contrib.auth.models import User

from blog.models import Post

class TestBlogModels(TestCase):

    def setUp(self):
        author = User.objects.create(username='TestUser1')
        self.post = Post.objects.create(
                        author=author,
                        title='Test Post Title 1',
                        content='Test content for title 1'
                    )

    ....

    def test_blog_author_label(self):
        author_field = Post._meta.get_field('author').verbose_name
        self.assertEqual(author_field, "author")

    def test_blog_title_label(self):
        title_field = Post._meta.get_field('title').verbose_name
        self.assertEqual(title_field, "title")

    def test_blog_content_label(self):
        content_field = Post._meta.get_field('content').verbose_name
        self.assertEqual(content_field, "content")

    def test_blog_title_max_length(self):
        title_field_length = Post._meta.get_field('title').max_length
        self.assertEqual(title_field_length, 100)

    ...

(verbose_namedjango.db.models.fields 删除到 models.py 中指定的字段)