Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django-自定义小部件-为什么Django认为我没有“属性”?_Django_Django Widget - Fatal编程技术网

Django-自定义小部件-为什么Django认为我没有“属性”?

Django-自定义小部件-为什么Django认为我没有“属性”?,django,django-widget,Django,Django Widget,编辑:使用Django 1.3 我已经构建了一个自定义小部件来教育自己,但我无法克服一个问题,即当获取页面时,Django说: 'FooTestWidget' object has no attribute 'attrs' 我不想使用'attrs'参数,我已经将它设置为默认值None,还尝试了一个空字典,例如{},所以我不明白Django为什么抱怨 widgets.py model.py DANIEL帮助后的工作版本 这是widgets.py的一个工作版本,它接受了Daniel在回答中解释的内

编辑:使用Django 1.3

我已经构建了一个自定义小部件来教育自己,但我无法克服一个问题,即当获取页面时,Django说:

'FooTestWidget' object has no attribute 'attrs'
我不想使用'attrs'参数,我已经将它设置为默认值None,还尝试了一个空字典,例如{},所以我不明白Django为什么抱怨

widgets.py

model.py

DANIEL帮助后的工作版本

这是widgets.py的一个工作版本,它接受了Daniel在回答中解释的内容,然后我做了一个或两个与此处描述的问题无关的小更改,但这使它无法正常工作。此版本现在可以按照我的预期工作:

from datetime import date
import re

from django.forms.widgets import Widget, Select
from django.utils.safestring import mark_safe
from django.forms import widgets
from django.template.base import Template

__all__ = ('FooTestWidget',)

RE_DATE = re.compile(r'(\d{4})-(\d\d?)-(\d\d?)$')

class FooTestWidget(Widget):
    """
    A very silly widget to test I can do anything
    """
    #def __init__(self, attrs={}):
    #    pass

    def render(self, name, value, attrs=None):
        sout = u"""<h1>This is here instead of a CharField</h1>"""
        return mark_safe(sout)

问题是你已经用一个什么都不做的方法覆盖了_uinit_uuuu。由于您甚至不调用超类方法,Django所期望的任何设置都不会发生:包括将attrs参数设置为self.attrs属性


基本上,如果你真的必须重写uuu init uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。但是,如果您在该方法中没有做任何特殊的操作,最好不要重写它,让超级方法自动使用。

问题是您已经用一个不做任何操作的方法重写了u init。由于您甚至不调用超类方法,Django所期望的任何设置都不会发生:包括将attrs参数设置为self.attrs属性


基本上,如果你真的必须重写uuu init uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。但是,如果你在这个方法中没有做什么特别的事情,最好不要覆盖它,让超级方法自动使用。

@catherine-谢谢你的评论。我同意错误信息是相同的,但实际上情况不同,是吗?。我的意思是没有一个自定义的小部件涉及和op似乎有混淆的领域和小部件?我很高兴被纠正,但就我所知,错误消息的文本是连接这两者的唯一东西?再次感谢。是的,不一样了。我只是想让你知道为什么会发生这种错误。我认为你犯了这个错误是因为你把它wrong@catherine-谢谢你的评论。我同意错误信息是相同的,但实际上情况不同,是吗?。我的意思是没有一个自定义的小部件涉及和op似乎有混淆的领域和小部件?我很高兴被纠正,但就我所知,错误消息的文本是连接这两者的唯一东西?再次感谢。是的,不一样了。我只是想让你知道为什么会发生这种错误。我认为你犯了这个错误,因为你把它弄错了,非常感谢。这让我可以让它工作,我已经把工作版本在上面的编辑问题,为了未来的搜索。正如你可能已经猜到的,我一直在尝试很多东西,而只包含“pass”的init是我后来忘记的迭代之一!再次感谢,非常感谢。这让我可以让它工作,我已经把工作版本在上面的编辑问题,为了未来的搜索。正如你可能已经猜到的,我一直在尝试很多东西,而只包含“pass”的init是我后来忘记的迭代之一!再次感谢,非常感谢。
class UserAdminForm(ModelForm):
    class Meta:
        model = User
        widgets = {
                'name_family': FooTestWidget,
        }

class UserAdmin(admin.ModelAdmin):
    form = UserAdminForm
class User(models.Model):
    id = models.AutoField(primary_key=True, db_column='USE_ID')
    name_given = models.CharField(max_length=200, db_column='USE_NAME_GIVEN')
    name_family = models.CharField(max_length=200, db_column='USE_NAME_FAMILY')
from datetime import date
import re

from django.forms.widgets import Widget, Select
from django.utils.safestring import mark_safe
from django.forms import widgets
from django.template.base import Template

__all__ = ('FooTestWidget',)

RE_DATE = re.compile(r'(\d{4})-(\d\d?)-(\d\d?)$')

class FooTestWidget(Widget):
    """
    A very silly widget to test I can do anything
    """
    #def __init__(self, attrs={}):
    #    pass

    def render(self, name, value, attrs=None):
        sout = u"""<h1>This is here instead of a CharField</h1>"""
        return mark_safe(sout)