views:

80

answers:

3

I am trying to build an example app in Google App Engine using django-nonrel. and am having problems implementing ListField attribute into a model.

I have created an app test_model and have included it as an installed app in my settings. The model.py is:

from django.db import models
from djangotoolbox import *
from dbindexer import *

# Create your models here.
class Example(models.Model):
    some_choices = models.ListField('Choice_examples')
    notes = models.CharField(max_length='20')
    updated_at = models.DateTimeField(auto_now=True)

    def __unicode__(self):
        return u'%s' % (self.notes)


class Choice_examples(models.Model):
    name = models.CharField(max_length='30')

    def __unicode__(self):
        return u'%s' % (self.name)

The above example gives me:
AttributeError:'module' object has no attribute 'Model'

If I comment out the djangotoolbox import, I get the following :
AttributeError: 'module' object has no attribute 'ListField'

What am I doing wrong here? I can't seem to find any documention as to how to go about using ListField in django-nonrel. Is that because it is supposed to really obvious?

A: 

Hello,

I don't know, but try with:

class Choice_examples(models.Model):
    name = models.CharField(max_length='30')

    def __unicode__(self):
        return u'%s' % (self.name)

class Example(models.Model):
    some_choices = models.ListField(Choice_examples)
    notes = models.CharField(max_length='20')
    updated_at = models.DateTimeField(auto_now=True)

    def __unicode__(self):
        return u'%s' % (self.notes)
sahid
Thanks for the suggestion Sahid, I tried the changes which are I gathered, 1) the reorder the classes 2) Remove the single quotes from Choice_examples. Unfortunately these changes didn't fix it.
iali
A: 

Your imports are smashing each other:

from django.db import models
from djangotoolbox import *

The second import will replace the django.db models with djangotoolbox' empty models module. Using from X import * is a terrible idea in general in Python and produces confusing results like these.

If you're looking to use ListField from djangotoolbox, use:

from djangotoolbox import fields

and refer to the ListField class as fields.ListField.

greensnark
Thanks Greensnark. I think I'm nearly there with it. Now getting the error: 'str' object has no attribute 'model'
iali
Exception location is: fields.py in contribute_to_class, line 13
iali
A: 

Looks like the answer is that you cannot pass an object into fields.ListField.

I have ditched trying to work with ListField as documentation is limited and my coding skills aren't at a level for me to work it out.

Anyone else coming across a similar problem, you should consider create a new model to map the ManyToMany relationships. And if the admin view is important, you should look into the following to display the ManyToMany table inline with any given admin view:

http://docs.djangoproject.com/en/1.2/ref/contrib/admin/#s-working-with-many-to-many-models

iali