Here is the error
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
The class in question within my 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)
The line I am getting the error on:
name = models.CharField(max_length=128)
But I (think) it means this one:
class Business(models.Model, forms.Form):
I'm not sure what it means exactly, how can I inherit my models from models.Model and forms.Form within the same class? Can I not pass two values when creating my class? If so how?
ANOTHER EDIT
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
Full traceback:
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
This is the problem:
class Business(models.Model, forms.Form):
You're trying to inherit from Model and Form. You can't, and you shouldn't.
You can't because the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases. Form has a metaclass:
__metaclass__ = DeclarativeFieldsMetaclass
Model also has a metaclass:
__metaclass__ = ModelBase
If you were to do this, you would need to set a metaclass which derives from both of those.
However, you shouldn't do this, because django has ModelForms, which exist to create forms that model models, saving you the trouble of the complexity here. Just stop inheriting from Form.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With