2012-10-25 29 views
13

Im nhận được lỗiTypeError 'x' không có thuộc tính '__getitem__'

'CampSite' object has no attribute '__getitem__' 

khi tôi tiết kiệm một mục CampCon mới trong giao diện quản trị. Tôi có một ứng dụng được gọi là khu cắm trại xử lý cơ sở dữ liệu của các khu cắm trại và tôi có một ứng dụng khác được gọi là nội dung xử lý đánh giá. Tôi rất mới với Django và đây là dự án không hướng dẫn đầu tiên của tôi. Tôi đã được bộ não của tôi và tìm kiếm trên web cho một câu trả lời mà không có may mắn. Cảm ơn rất nhiều về sự trợ giúp của bạn. Đây là mô hình khu cắm trại của tôi:

from django.contrib.gis.db import models 

class CampSite(models.Model): 
    name = models.CharField(max_length=250) 
    showers = models.BooleanField() 
    flush = models.BooleanField() 
    rv = models.BooleanField() 
    lonlat = models.PointField(null=True, blank=True) 

    objects = models.GeoManager() 

    def __unicode__(self): 
     return self.name 

Dưới đây là mô hình nội dung:

from django.contrib.gis.db import models 
from campsites.models import CampSite 
from django.contrib.auth.models import User 
from activities.models import Activities 


class CampCon(models.Model): 
    campsite = models.ForeignKey(CampSite) 
    trip = models.ForeignKey('Trip') 
    Date = models.DateField() 
    user = models.ForeignKey(User) 
    overall_review = models.TextField() 
    facilities_review = models.IntegerField() 
    things_to_do = models.IntegerField() 
    privacy = models.IntegerField() 
    beauty = models.IntegerField() 
    overall_rating = models.IntegerField() 

    def __unicode__(self): 
     return self.campsite 

class ImageDB(models.Model): 
    campsite = models.ForeignKey(CampSite) 
    user = models.ForeignKey(User) 
    description = models.CharField(max_length=200) 
    image = models.ImageField(upload_to='/home/bobby/Pictures/CampThat') 
    date_uploaded = models.DateField() 
    date_taken = models.DateField() 
    trip = models.ForeignKey('Trip') 
    activity = models.ForeignKey(Activities) 

    def __unicode__(self): 
     return self.campsite 

class Trip(models.Model): 
    date = models.DateField() 
    description = models.CharField(max_length=100) 
    title = models.CharField(max_length=100) 
    blog = models.TextField() 

    def __unicode__(self): 
     return self.title 

class ActivityCon(models.Model): 
    trip = models.ForeignKey(Trip) 
    rating = models.IntegerField() 
    overall_review = models.TextField() 
    activity = models.ForeignKey(Activities) 

Và đây là toàn bộ Traceback:

Environment: 


Request Method: POST 
Request URL: http://localhost:8000/admin/content/campcon/add/ 

Django Version: 1.5 
Python Version: 2.7.3 
Installed Applications: 
('django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'campsites', 
'auth', 
'trips', 
'content', 
'activities', 
'django.contrib.admin') 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware') 


Traceback: 
File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    116.       response = callback(request, *callback_args, **callback_kwargs) 
File "/usr/lib/python2.7/site-packages/django/contrib/admin/options.py" in wrapper 
    367.     return self.admin_site.admin_view(view)(*args, **kwargs) 
File "/usr/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view 
    91.      response = view_func(request, *args, **kwargs) 
File "/usr/lib/python2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func 
    89.   response = view_func(request, *args, **kwargs) 
File "/usr/lib/python2.7/site-packages/django/contrib/admin/sites.py" in inner 
    202.    return view(request, *args, **kwargs) 
File "/usr/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapper 
    25.    return bound_func(*args, **kwargs) 
File "/usr/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view 
    91.      response = view_func(request, *args, **kwargs) 
File "/usr/lib/python2.7/site-packages/django/utils/decorators.py" in bound_func 
    21.     return func(self, *args2, **kwargs2) 
File "/usr/lib/python2.7/site-packages/django/db/transaction.py" in inner 
    208.     return func(*args, **kwargs) 
File "/usr/lib/python2.7/site-packages/django/contrib/admin/options.py" in add_view 
    958.     self.log_addition(request, new_object) 
File "/usr/lib/python2.7/site-packages/django/contrib/admin/options.py" in log_addition 
    525.    action_flag  = ADDITION 
File "/usr/lib/python2.7/site-packages/django/contrib/admin/models.py" in log_action 
    18.   e = self.model(None, None, user_id, content_type_id, smart_text(object_id), object_repr[:200], action_flag, change_message) 

Exception Type: TypeError at /admin/content/campcon/add/ 
Exception Value: 'CampSite' object has no attribute '__getitem__' 

Trả lời

29

vấn đề của bạn là __unicode__ chức năng của bạn đang quay trở lại các đối tượng mô hình khi chúng cần trả về các chuỗi unicode.

Bạn có thể đạt được điều này bằng cách thêm unicode() chức năng để __unicode__ phương pháp của bạn:

class CampCon(models.Model): 
    campsite = models.ForeignKey(CampSite) 
    trip = models.ForeignKey('Trip') 
    Date = models.DateField() 
    user = models.ForeignKey(User) 
    overall_review = models.TextField() 
    facilities_review = models.IntegerField() 
    things_to_do = models.IntegerField() 
    privacy = models.IntegerField() 
    beauty = models.IntegerField() 
    overall_rating = models.IntegerField() 

    def __unicode__(self): 
     return unicode(self.campsite) 

class ImageDB(models.Model): 
    campsite = models.ForeignKey(CampSite) 
    user = models.ForeignKey(User) 
    description = models.CharField(max_length=200) 
    image = models.ImageField(upload_to='/home/bobby/Pictures/CampThat') 
    date_uploaded = models.DateField() 
    date_taken = models.DateField() 
    trip = models.ForeignKey('Trip') 
    activity = models.ForeignKey(Activities) 

    def __unicode__(self): 
     return unicode(self.campsite) 

này sẽ gọi CampSite.__unicode__ đó sẽ trở lại campsite.name.

+0

Cảm ơn bạn! bạn vừa cứu tôi. –

2

Sử dụng phương pháp này để thay thế:

def __unicode__(self): 
     return unicode(self.campsite) 
0

này cũng sẽ xảy ra nếu bạn làm điều đó như thế này:

event_name = CharField(max_length = 250) 

và không như thế này: (đúng cách)

event_name = models.CharField(max_length = 250) 

có thể hữu ích cho ai đó

0

Vì đây là hit đầu tiên trên Google: Tôi đã nhận một lỗi tương tự ('ItemGroup' object has no attribute '__getitem__') khi làm như sau:

class ItemGroup(models.Model): 
    groupname = models.CharField(max_length=128) 

    def __unicode__(self): 
     return "%s" % self.groupname 

class Item(models.Model): 
    name = models.CharField(max_length=128) 
    group = models.ForeignKey(MedGroup, verbose_name="Groep") 

    def __unicode__(self): 
     return "%s (%s)" % (self.name, self.group[:10]) 

Dòng cuối cùng là sai.

Đã sửa lỗi bằng cách thay thế dòng đó thành return "%s (%s)" % (self.name, self.group.groupname[:10])

Các vấn đề liên quan