【问题标题】:new django/python user having issues with __init__ i've defined a few classes, and want to use one class as a field for another新的 django/python 用户对 __init__ 有问题我已经定义了一些类,并希望将一个类用作另一个类的字段
【发布时间】: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)

感谢任何帮助!

【问题讨论】:

    标签: python django


    【解决方案1】:

    您不应覆盖 django.model.Model 中的 __init__ 方法。 如果您需要类似的东西,文档可以指导您如何解决此问题: https://docs.djangoproject.com/en/1.11/ref/models/instances/#django.db.models.Model

    【讨论】:

    • 谢谢!现在我需要弄清楚如何处理一系列图片,感谢您!
    • 在这种情况下,您不应该使用ForeignKey 吗? docs.djangoproject.com/en/1.11/topics/db/examples/many_to_one
    • 是的,你肯定就在那儿!感谢您的帮助。
    • 没问题。如果您满意,请接受答案,这样问题就不再是“未回答”了;)
    • 这行得通,但我找不到添加数据库中已有图片的选项。管理站点强迫我创建一个新图片。我也希望能够在许多系列中拥有相同的图片。
    猜你喜欢
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多