【问题标题】:Django: Spelling Mismatch Despite not being writtenDjango:尽管没有写,但拼写不匹配
【发布时间】:2015-07-25 16:56:57
【问题描述】:

有一个我无法解决的令人困惑的问题。
models.py 有:

class Meetings(models.Model):
    team_id =                   models.ForeignKey( Team )
    meeting_id =                models.AutoField( primary_key = True )    
    mentor_meeting_rating =     models.IntegerField( default = 0, validators=[MinValueValidator(0), MaxValueValidator(5)] )
    mentee_meeting_rating =     models.IntegerField( default = 0, validators=[MinValueValidator(0), MaxValueValidator(5)] )   
    meeting_date = models.DateTimeField( default = django.utils.timezone.now ,blank = True)
    TEL = 'Telephone'
    ONL = 'Online'
    F2F = 'Face to Face'
    MEETING_METHODS = (
        (TEL,'Telephone'), 
        (ONL,'Online' ),
        (F2F,'Face to Face'),
    )
    meeting = models.CharField( max_length = 15, 
                              choices = MEETING_METHODS,
                              default = F2F )

admin.py 有:

from django.contrib import admin
from .models import Mentor, Mentee, Team, Admin, Meetings, Goals
# Register your models here.

admin.site.register(Mentor)
admin.site.register(Mentee)
admin.site.register(Team)
admin.site.register(Meetings)
admin.site.register(Goals)
admin.site.register(Admin)


urls.py 是:

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^dream_site/', include('dream_site.urls')),
]

settings.py 有:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'dream_site',
    'dream_chat',
)

但会议在管理界面中有 2 个“s”,我运行了一个 grep 命令,但它没有显示任何有“会议”的地方。
我检查并再次检查,但我无法弄清楚为什么会发生这种情况。

【问题讨论】:

  • 你应该为你的类使用单数名称。实例不是“会议”,而是会议。

标签: python django python-3.x


【解决方案1】:

Django 会自动创建你的类名的复数形式。例如,此功能在管理界面中使用。因此,您看到的是“Meetingss”。

使用单数名称(会议)命名您的课程是一种很好的做法。如果你想保持你的命名,你可以在类的元信息中覆盖 Django 的复数创建:

class Meetings(models.Model):
    # your code here

    class Meta:
        verbose_name_plural = 'Meetings'

更多信息请参见https://docs.djangoproject.com/en/1.8/ref/models/options/#verbose-name-plural

【讨论】:

【解决方案2】:

默认情况下,Django 管理员将所有模型列为复数形式,即以's' 结尾。

所以,Django 在管理模板的Meetings 中添加了一个's'。现在,由于您的模型Meetings 在末尾有一个s,因此它显示为Meetingss

要控制这种行为,您可以使用verbose_name_plural。它控制对象的复数名称。

您可以根据自己的选择设置对象的复数名称。如果没有设置,Django 会在末尾添加一个's'

根据Django docs

如果没有给出,Django 将使用verbose_name + "s"。

您可以在 Meta 类中指定 verbose_name_pluralMeetings 的值,如下所示:

class Meetings(models.Model):
    team_id =                   models.ForeignKey( Team )
    meeting_id =                models.AutoField( primary_key = True )    
    mentor_meeting_rating =     models.IntegerField( default = 0, validators=[MinValueValidator(0), MaxValueValidator(5)] )
    mentee_meeting_rating =     models.IntegerField( default = 0, validators=[MinValueValidator(0), MaxValueValidator(5)] )   
    meeting_date = models.DateTimeField( default = django.utils.timezone.now ,blank = True)
    TEL = 'Telephone'
    ONL = 'Online'
    F2F = 'Face to Face'
    MEETING_METHODS = (
        (TEL,'Telephone'), 
        (ONL,'Online' ),
        (F2F,'Face to Face'),
    )
    meeting = models.CharField( max_length = 15, 
                              choices = MEETING_METHODS,
                              default = F2F )

    class Meta:
        verbose_name_plural = 'Meetings' # explicitly provide the verbose_plural_name

注意:类名使用单数

您可以通过verbose_name 参数控制模型的详细名称。

根据verbose_name 文档,

对象的可读名称,单数

class Meetings:

    ....
    class Meta:
        verbose_name = 'Meeting'

这也适用于您的情况。

【讨论】:

  • 经过多次编辑,现在是更完整的答案! +1
【解决方案3】:

MeetingssMeetings 的复数形式,Django Admin 冒昧地在其中添加了额外的 's' 来管理模型对象列表。

你的Goalss也发生了同样的事情

【讨论】:

    【解决方案4】:

    您可以做的是使用上面定义的详细名称,或者您可以简单地将您的模型定义为“会议”而不是“会议”来解决问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-10
      • 2014-11-26
      • 1970-01-01
      • 2022-07-02
      • 1970-01-01
      • 2018-02-09
      • 2019-03-05
      相关资源
      最近更新 更多