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

Вот ошибка

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

Рассматриваемый класс в моих моделях.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):

Я не уверен, что именно это означает, как я могу наследовать свои модели от 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

person jdx    schedule 25.07.2012    source источник
comment
Зачем тебе это? Если вы хотите создавать формы, создайте для этого отдельный класс.   -  person Thomas    schedule 25.07.2012
comment
Потому что округ и почтовый индекс связаны с бизнесом. Разве не разумно разместить их в одной таблице, поскольку я буду обращаться к каждой записи по одной?   -  person jdx    schedule 25.07.2012
comment
Пожалуйста, покажите ошибку полностью. sscce.org   -  person Marcin    schedule 26.07.2012
comment
Я отредактировал свой оригинальный пост. Любые подсказки будут оценены, я думаю, что это может иметь какое-то отношение к конфликту, возможно, в моем импорте?   -  person jdx    schedule 26.07.2012
comment
@jdx Я думаю, вам нужно прочитать, что такое формы Django. Они не имеют ничего общего со столами.   -  person Thomas    schedule 26.07.2012


Ответы (1)


Это проблема:

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

Вы пытаетесь наследовать от Model и Form. Вы не можете, и вы не должны.

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

__metaclass__ = DeclarativeFieldsMetaclass

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

__metaclass__ = ModelBase

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

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

person Marcin    schedule 25.07.2012
comment
Я удалил form.Form и оставил свои формы, используя местный вкус, как есть, и, похоже, это работает. Потому что я ничего не получаю от вызова формы.*. Спасибо за вашу помощь. - person jdx; 26.07.2012
comment
@jdx Пожалуйста. Пожалуйста, примите этот ответ и проголосуйте за него. - person Marcin; 26.07.2012