【发布时间】:2017-07-19 02:52:25
【问题描述】:
我是一个新的 django 用户,对继承和实例化的一些特性感到困惑,特别是创建用户定义的类型类的字段。
当我尝试从管理页面添加艺术家时,我得到 python TypeError: init() 缺少 5 个必需的位置参数:'name'、'first_name'、'last_name'、'website' 和 'instagram' [2017 年 7 月 18 日 21:43:28 ] "GET /admin/showyourwork/artist/add/HTTP/1.1" 500 110559
from django.db import models
# Create your models here.
from django.db.models import ImageField
from django.urls import reverse
class Artist(models.Model):
# Fields
first_name = models.CharField(max_length=30, null=True)
last_name = models.CharField(max_length=30, null=True)
name = models. CharField(max_length=61, null=True)
website = models.CharField(max_length=50, null=True)
instagram = models.CharField(max_length=20, null=True)
# Metadata
class Meta:
ordering = ["last_name", "first_name"]
# Methods
def __init__(self, name, first_name, last_name, website, instagram):
self.name = name
self.first_name = first_name
self.last_name = last_name
self.website = website
self.instagram = instagram
def get_absolute_url(self):
"""
Returns the url to access a particular instance of MyModelName.
"""
return reverse('model-detail-view', args=[str(self.id)])
def __str__(self):
"""
String for representing the MyModelName object (in Admin site etc.)
"""
return self.name
class Media(models.Model):
# Fields
title = models.CharField(max_length=50)
artist = models.ForeignKey(Artist)
# Metadata
# class Meta:
# ordering = ["author", "title"]
# Methods
def __init__(self, title):
self.title = title
self.artist = Artist(None, None, None, None, None)
def get_absolute_url(self):
"""
Returns the url to access a particular instance of MyModelName.
"""
return reverse('model-detail-view', args=[str(self.id)])
def __str__(self):
"""
String for representing the MyModelName object (in Admin site etc.)
"""
return self.title
class Picture(Media):
# Fields inherits title and author from Media
image = ImageField()
# Metadata inherits from Media
# Methods
def __init__(self, *args, **kwargs):
self.image = kwargs.pop('image')
super(Media, self).__init__(*args, **kwargs)
class Series(Media):
# Fields inherits title and author from Media
images = []
# Metadata inherits from Media
# Methods
def __init__(self, *args, **kwargs):
self.images.append(kwargs.pop('image'))
super(Media, self).__init__(*args, **kwargs)
def addimage(self, image):
self.images.append(self, image)
感谢任何帮助!
【问题讨论】: