Django: ошибка при вызове базы метакласса

Вот ошибка

TypeError: ошибка при вызове баз метакласса     metaclass: метакласс производного класса должен быть (нестрогим) подклассом метаклассов всех его оснований

Класс, о котором идет речь, в моих models.py

class Business(models.Model, forms.Form):
    name = models.CharField(max_length=128)
    tel_no = models.CharField(max_length=11)
    address_ln1 = models.CharField(max_length=128)
    address_ln2 = models.CharField(max_length=128)
    city = models.CharField(max_length=64)
    county = GBCountySelect()
    postcode = GBPostcodeField()
    website = models.URLField(max_length=128)
# Logging Info
    slug = models.SlugField()
    date_added = models.DateField(auto_now_add=True)
    time_added = models.TimeField()
    added_by_user = models.CharField(max_length=64)
    last_edit_time = models.TimeField(auto_now=True)
    last_edit_date = models.DateField(auto_now=True)

В строке появляется сообщение об ошибке:

name = models.CharField(max_length=128)

Но я (думаю) это означает следующее:

class Business(models.Model, forms.Form):

Я не уверен, что именно означает, как я могу наследовать свои модели от моделей. Моделя и формы. Форм внутри одного класса? Могу ли я не передавать два значения при создании моего класса? Если да, то как?

ДРУГОЕ ИЗОБРАЖЕНИЕ

All my imports
from django.db import models
from django import forms
from django.contrib.localflavor import generic
from django.contrib.localflavor.gb.forms import GBPostcodeField, GBCountySelect

Полная трассировка:

Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/jws1000/.virtualenvs/glutenfree/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
    utility.execute()
  File "/home/jws1000/.virtualenvs/glutenfree/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/jws1000/.virtualenvs/glutenfree/lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/home/jws1000/.virtualenvs/glutenfree/lib/python2.7/site-packages/django/core/management/base.py", line 231, in execute
    self.validate()
  File "/home/jws1000/.virtualenvs/glutenfree/lib/python2.7/site-packages/django/core/management/base.py", line 266, in validate
    num_errors = get_validation_errors(s, app)
  File "/home/jws1000/.virtualenvs/glutenfree/lib/python2.7/site-packages/django/core/management/validation.py", line 30, in get_validation_errors
    for (app_name, error) in get_app_errors().items():
  File "/home/jws1000/.virtualenvs/glutenfree/lib/python2.7/site-packages/django/db/models/loading.py", line 158, in get_app_errors
    self._populate()
  File "/home/jws1000/.virtualenvs/glutenfree/lib/python2.7/site-packages/django/db/models/loading.py", line 64, in _populate
    self.load_app(app_name, True)
  File "/home/jws1000/.virtualenvs/glutenfree/lib/python2.7/site-packages/django/db/models/loading.py", line 88, in load_app
    models = import_module('.models', app_name)
  File "/home/jws1000/.virtualenvs/glutenfree/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/home/jws1000/envs/glutenfree/glutenfree/glutenfree/listings/models.py", line 9, in <module>
    class Business(models.Model, forms.Form):
  File "/home/jws1000/.virtualenvs/glutenfree/lib/python2.7/site-packages/django/db/models/base.py", line 41, in __new__
    new_class = super_new(cls, name, bases, {'__module__': module})
TypeError: Error when calling the metaclass bases
    metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
+8
25 июл. '12 в 19:51
источник поделиться
1 ответ

В этом проблема:

class Business(models.Model, forms.Form):

Вы пытаетесь наследовать модель и форму. Вы не можете, и не должны.

Вы не можете, потому что метакласс производного класса должен быть (нестрогим) подклассом метаклассов всех его оснований. Форма имеет метакласс:

__metaclass__ = DeclarativeFieldsMetaclass

Модель также имеет метакласс:

__metaclass__ = ModelBase

Если вы должны это сделать, вам нужно будет установить метакласс, который будет получен из обоих.

Однако вы не должны этого делать, потому что у django есть ModelForms, которые существуют для создания форм, которые моделируют модели, избавляя вас от сложности сложности здесь. Просто прекратите наследование формы.

+10
25 июл. '12 в 20:07
источник

Посмотрите другие вопросы по меткам или Задайте вопрос