【问题标题】:AttributeError: type object 'MyModel' has no attribute '_meta'AttributeError:类型对象“MyModel”没有属性“_meta”
【发布时间】:2015-02-06 07:44:31
【问题描述】:

我已经创建了视图 MyView (CreateView) 和模型和表单并且得到一个错误:

AttributeError: type object 'MyModel' has no attribute '_meta'

这是我的看法:

class MyView(CreateView):
    model = MyModel
    template_name = "myapp/template1.html"

这是我的模型:

class MyModel(models.Model):
    free_day = models.CharField(max_length=255)
    name = models.CharField(max_length=255, blank=True, null=True)

    class Meta:
        verbose_name = _('MyModel')
        verbose_name_plural = _('MyModels')

    def __unicode__(self):
        return self.free_day

我的表格:

class MyInputForm(forms.ModelForm):

    class Meta:
        model = MyModel
        fields = ('user', 'free_day', )

这是我的回溯

Internal Server Error: /freedays/addvacation/
Traceback (most recent call last):
  File "/home/mariusz/.virtualenvs/urlop/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 111, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/mariusz/.virtualenvs/urlop/local/lib/python2.7/site-packages/django/db/transaction.py", line 394, in inner
    return func(*args, **kwargs)
  File "/home/mariusz/.virtualenvs/urlop/local/lib/python2.7/site-packages/django/views/generic/base.py", line 69, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/mariusz/.virtualenvs/urlop/local/lib/python2.7/site-packages/django/views/generic/base.py", line 87, in dispatch
    return handler(request, *args, **kwargs)
  File "/home/mariusz/.virtualenvs/urlop/local/lib/python2.7/site-packages/django/views/generic/edit.py", line 203, in get
    return super(BaseCreateView, self).get(request, *args, **kwargs)
  File "/home/mariusz/.virtualenvs/urlop/local/lib/python2.7/site-packages/django/views/generic/edit.py", line 161, in get
    form_class = self.get_form_class()
  File "/home/mariusz/.virtualenvs/urlop/local/lib/python2.7/site-packages/django/views/generic/edit.py", line 119, in get_form_class
    return model_forms.modelform_factory(model, fields=self.fields)
  File "/home/mariusz/.virtualenvs/urlop/local/lib/python2.7/site-packages/django/forms/models.py", line 539, in modelform_factory
    return type(form)(class_name, (form,), form_class_attrs)
  File "/home/mariusz/.virtualenvs/urlop/local/lib/python2.7/site-packages/django/forms/models.py", line 284, in __new__
    opts.help_texts, opts.error_messages)
  File "/home/mariusz/.virtualenvs/urlop/local/lib/python2.7/site-packages/django/forms/models.py", line 184, in fields_for_model
    opts = model._meta
AttributeError: type object 'MyModel' has no attribute '_meta'

【问题讨论】:

  • 请显示完整的回溯。
  • 我添加了完整的回溯。
  • 完全试用了您的代码,它对我有用。你的urls.py 中有什么指向这个视图?

标签: python django forms model


【解决方案1】:

我不明白为什么它会给出这个错误(似乎 MyModel 实际上不是您的模型类 - 您是否在其他地方重新定义了它?),但有一个明显的问题:您的视图应该引用您拥有的表单定义,而不是直接定义模型。

class MyView(CreateView):
    form_class = MyInputForm

【讨论】:

    【解决方案2】:

    而不是以下:

    def get(request,self):
    

    你可以使用这样的东西:

    def get(self,request):
    

    其他都应该没问题!!!

    【讨论】:

      【解决方案3】:

      您是否尝试过将 meta 作为函数,使其看起来像这样;

      class MyModel(models.Model):
          free_day = models.CharField(max_length=255)
          name = models.CharField(max_length=255, blank=True, null=True)
      
          def Meta():
              verbose_name = _('MyModel')
              verbose_name_plural = _('MyModels')
      
          def __unicode__(self):
              return self.free_day
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-05
        • 2016-05-25
        • 2019-07-26
        • 1970-01-01
        • 2017-07-13
        • 1970-01-01
        • 1970-01-01
        • 2023-01-20
        相关资源
        最近更新 更多