복붙노트

[PYTHON] TypeError 'x'객체에 '__getitem__'속성이 없습니다.

PYTHON

TypeError 'x'객체에 '__getitem__'속성이 없습니다.

오류가 발생했습니다.

관리자 인터페이스에 새 CampCon 항목을 저장하면 캠프 사이트라는 데이터베이스를 처리하는 캠프 사이트라는 애플리케이션이 하나 있는데 리뷰를 처리하는 콘텐츠라는 또 다른 애플리케이션이 있습니다. 나는 Django에 대해 아주 익숙하다. 그리고 이것은 나의 첫번째 비 튜토리얼 기반 프로젝트이다. 나는 뇌를 고수하고 웹에서 운이없는 대답을 찾고있다. 당신의 도움에 미리 감사드립니다. 여기 내 캠프장 모델입니다 :

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

콘텐츠 모델은 다음과 같습니다.

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)

그리고 여기 전체 자취가 있습니다 :

    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__'

해결법

  1. ==============================

    1.문제는 __unicode__ 함수가 유니 코드 문자열을 반환해야 할 때 모델 객체를 반환한다는 것입니다.

    문제는 __unicode__ 함수가 유니 코드 문자열을 반환해야 할 때 모델 객체를 반환한다는 것입니다.

    __unicode__ 메소드에 unicode () 함수를 추가하면됩니다.

    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)
    

    그러면 Campsite.__ unicode__이 호출되어 campsite.name이 반환됩니다.

  2. ==============================

    2.이 방법을 대신 사용하십시오.

    이 방법을 대신 사용하십시오.

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

    3.다음과 같이하면 이렇게됩니다.

    다음과 같이하면 이렇게됩니다.

    event_name = CharField(max_length = 250)
    

    그리고 이렇게 : (옳은 길)

    event_name = models.CharField(max_length = 250)
    

    누군가에게 도움이 될지 모른다.

  4. ==============================

    4.이후 구글에서 첫 번째 히트 : 나는 다음과 같은 유사한 오류가 발생했습니다 ( 'ItemGroup'개체 속성 '__getitem__'가 없습니다) :

    이후 구글에서 첫 번째 히트 : 나는 다음과 같은 유사한 오류가 발생했습니다 ( 'ItemGroup'개체 속성 '__getitem__'가 없습니다) :

    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])
    

    마지막 줄이 잘못되었습니다.

    "% s (% s)"% (self.name, self.group.groupname [: 10])를 반환하도록 해당 행을 대체하여 수정되었습니다.

  5. from https://stackoverflow.com/questions/13074331/typeerror-x-object-has-no-attribute-getitem by cc-by-sa and MIT license