Django 1.9中的模型。TypeError:__init __()为参数'verbose_name'获得了多个值

Don*_*you 3 python django

我有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"
Run Code Online (Sandbox Code Playgroud)

但是有一个错误

文件“ /home/donotyou/PycharmProjects/djangobook/polls/models.py”,第15行,在问题pub_date = models.DateTimeField('date_published',verbose_name =“ Date”)TypeError中:init()为参数'获得了多个值verbose_name'

请帮忙

vis*_*ell 5

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

但是,您得到的错误是因为pub_date = models.DateTimeField('date_published', verbose_name="Date")在这里您设置了verbose_name两次,因为django的第一个参数Fieldverbose_name,然后设置了verbose_name相同的参数,使两个相同的参数传递给class。

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

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"
Run Code Online (Sandbox Code Playgroud)

注意:在大多数情况下,将其verbose_name作为第一个参数传递时更易读,而没有verbose_name=关系字段。从文档

每个字段类型,除了ForeignKeyManyToManyField并且OneToOneField,有一个可选的第一位置参数-一个详细名称。如果未提供详细名称,则Django将使用字段的属性名称自动创建,将下划线转换为空格。