9

fragment of models.py

class Hardware_type(models.Model):
    type = models.CharField(blank = False, max_length = 50, verbose_name="Type")
    description = models.TextField(blank = True, verbose_name="Description")
    slug = models.SlugField(unique = True, max_length = 255, verbose_name = "Slug")

class Software_type(models.Model):
    type = models.CharField(blank = False, max_length = 50, verbose_name="Type")
    description = models.TextField(blank = True, verbose_name="Description")
    slug = models.SlugField(unique = True, max_length = 255, verbose_name = "Slug")

and now

>>> sw = Software_type.objects.get(slug='unix')
>>> sw
<Software_type: Unix>
>>> hw = Hardware_type.objects.get(slug='printer')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: type object 'Hardware_type' has no attribute 'objects'

I can't see why this happens. Anyone can help me?

Edit:

sorry that did not sent all the code - problem solved. in another class I had

hardware_type = models.ManyToManyField(Hardware_type, verbose_name="Hardware Type")

after change from hardware_type to hw_type - works fine I did not know that can cause this problem.

Kubas
  • 976
  • 1
  • 15
  • 34

4 Answers4

13

If you add a custom manager to a model then the default manager at objects will not be created. Either add it yourself in the class definition, or stick with using the custom manager.

Ignacio Vazquez-Abrams
  • 776,304
  • 153
  • 1,341
  • 1,358
1

Your code works for me:

>>> hw = Hardware_type.objects.get(slug='111')
>>> hw
<Hardware_type: Hardware_type object>

However, using the keyword type might be a little dangerous, and probably you would like to avoid using it.

Udi
  • 29,222
  • 9
  • 96
  • 129
1

it turned out that only began to work in django console,

Later I noticed that I have some old code in forms.py

class Hardware_type(forms.ModelForm):
    class Meta:
        model = Hardware_type

and thus it did not work, it was a bad day for naming classes, etc.

Kubas
  • 976
  • 1
  • 15
  • 34
0

In my case, my model's meta class had abstract=True and i was using model.objects.all(). Since abstract cannot be instantiated, we cannot use this.

Lavina Khushlani
  • 509
  • 2
  • 7
  • 14