【问题标题】:Model in Django 1.9. TypeError: __init__() got multiple values for argument 'verbose_name'Django 1.9 中的模型。 TypeError:__init__() 为参数 'verbose_name' 获得了多个值
【发布时间】:2016-10-03 16:48:41
【问题描述】:

我有 Python 3.5 和 Django 1.9 尝试做下一个

class Question(models.Model):
def __init__(self, *args, question_text=None, pub_date=None, **kwargs):
    self.question_text = question_text
    self.pub_date = pub_date
question_text = models.CharField(max_length=200, verbose_name="Question")
pub_date = models.DateTimeField('date_published', verbose_name="Date")

def __str__(self):
    return self.question_text

def __unicode__(self):
    return self.question_text

class Meta:
    verbose_name = "Question"

但出现错误

文件“/home/donotyou/PycharmProjects/djangobook/polls/models.py”, 第 15 行,在问题中 pub_date = models.DateTimeField('date_published', verbose_name="Date") TypeError: init() got multiple values for 参数“verbose_name”

请帮忙

【问题讨论】:

  • 你用什么覆盖__init__()

标签: python django


【解决方案1】:

您不需要在 Django 中覆盖 __init__。 Django 为你做所有事情,你只需要定义你的模型就可以了。

但是你得到的错误是因为pub_date = models.DateTimeField('date_published', verbose_name="Date") 在这里你设置verbose_name 两次,因为 django Field 的第一个参数是verbose_name 之后你设置了相同的verbose_name 使两个相同的参数通过上课。

所以基本上你需要做的是:

class Question(models.Model):
    question_text = models.CharField(max_length=200, verbose_name="Question")
    pub_date = models.DateTimeField('date_published')  # or pub_date = models.DateTimeField("Date")

    def __str__(self):
        return self.question_text

    def __unicode__(self):
        return self.question_text

    class Meta:
        verbose_name = "Question"

注意:在大多数情况下,将verbose_name 作为第一个参数传递而不带任何verbose_name=(关系字段除外)更易读。 来自docs

每个字段类型,除了ForeignKeyManyToManyFieldOneToOneField,都采用一个可选的第一个位置参数——一个详细的名称。如果没有给出详细名称,Django 将使用字段的属性名称自动创建它,将下划线转换为空格。

【讨论】:

    【解决方案2】:

    我相信你不应该在这里覆盖__init__()(就像@vishes_shell 应该的那样)。取而代之的是,如果您想对实例初始化进行一些自定义,可以将 classmethod create 添加到模型中。这是文档:https://docs.djangoproject.com/en/1.10/ref/models/instances/#creating-objects

    【讨论】:

      猜你喜欢
      • 2019-07-05
      • 1970-01-01
      • 1970-01-01
      • 2018-07-28
      • 2022-08-22
      • 1970-01-01
      • 2022-11-17
      • 2019-01-03
      • 1970-01-01
      相关资源
      最近更新 更多