2013-08-23 2 views
0

Django의 새로운 브랜드는 초보자 용 질문을 변명합니다. 나는 내 인생에 내가 원하는 것을 돌려주는 Google 검색을 할 수 없다.Django filter()는 내용 대신 객체를 반환합니다.

먼저 inspectdb를 사용하여 가져 왔습니다.

둘째는 제공하기 전에 :

def __unicode__(self): 
     return u'%s %s' % (self.id, self.cuisine) 

를 모델에서, 모든 데이터베이스 관리자에서 볼 때 실제 데이터에 비해 바인딩 된 개체를 어떻게 생겼는지 보여 주었다. 나는 이것이 정상이라고 생각했다.

이제 데이터베이스를 쿼리하고 결과를 표시하려고합니다. 그냥 간단하게 뭔가를하고, 코드는 다음과 같습니다

def expand(request): 
    userid = Userid.objects.filter(name__contains="Test") 
    return render(request,'expand.html',{'userid':userid}) 

반환 그냥 테스트 1, 시험이해야하지만, 대신에 내가 얻을 :

[<Userid: Userid object>, <Userid: Userid object>] 

는 사용자 ID를 시도, userid.name을 템플릿 모두에 내용 대 객체를 반환합니다.

감사합니다. 미안하지만 반복 질문입니다.

모델 :

class Userid(models.Model): 
    id = models.BigIntegerField(primary_key=True, db_column='ID') # Field name made lowercase. 
    name = models.TextField() 
    joindate = models.DateField(db_column='joinDate') # Field name made lowercase. 
    visits = models.IntegerField(null=True, blank=True) 
    gender = models.TextField(blank=True) 
    address = models.TextField() 
    address2 = models.TextField(blank=True) 
    addresscity = models.TextField(db_column='addressCity') # Field name made lowercase. 
    addressstate = models.TextField(db_column='addressState') # Field name made lowercase. 
    addresszip = models.IntegerField(db_column='addressZip') # Field name made lowercase. 
    rating = models.IntegerField() 
    lastvisit = models.DateField(null=True, db_column='lastVisit', blank=True) # Field name made lowercase. 
    topcuisine1 = models.IntegerField(null=True, db_column='topCuisine1', blank=True) # Field name made lowercase. 
    topcuisine2 = models.IntegerField(null=True, db_column='topCuisine2', blank=True) # Field name made lowercase. 
    topcuisine3 = models.IntegerField(null=True, db_column='topCuisine3', blank=True) # Field name made lowercase. 
    topcuisine4 = models.IntegerField(null=True, db_column='topCuisine4', blank=True) # Field name made lowercase. 
    topcuisine5 = models.IntegerField(null=True, db_column='topCuisine5', blank=True) # Field name made lowercase. 
    dealsparticipatedin = models.IntegerField(db_column='dealsParticipatedIn') # Field name made lowercase. 
    privateoffersparticipatedin = models.IntegerField(db_column='privateOffersParticipatedIn') # Field name made lowercase. 
    privateofferssent = models.IntegerField(db_column='privateOffersSent') # Field name made lowercase. 
    toprestaurant1 = models.IntegerField(db_column='topRestaurant1') # Field name made lowercase. 
    toprestaurant2 = models.IntegerField(db_column='topRestaurant2') # Field name made lowercase. 
    toprestaurant3 = models.IntegerField(db_column='topRestaurant3') # Field name made lowercase. 
    dob = models.DateField(null=True, blank=True) 
    tipsrating = models.IntegerField(null=True, db_column='tipsRating', blank=True) # Field name made lowercase. 
    visitsweekday = models.IntegerField(null=True, db_column='visitsWeekDay', blank=True) # Field name made lowercase. 
    visitsweekend = models.IntegerField(null=True, db_column='visitsWeekend', blank=True) # Field name made lowercase. 
    reviewrating = models.IntegerField(null=True, db_column='reviewRating', blank=True) # Field name made lowercase. 
    spendrating = models.IntegerField(null=True, db_column='spendRating', blank=True) # Field name made lowercase. 
    class Meta: 
     db_table = 'userID' 

템플릿 :

<p>{{ userid }}</p> 
+0

모델 및 템플릿을 게시하십시오. –

+0

'qs = [, ]가 qs : obj.name'에서 obj를위한 것입니까 ?? –

+0

좋아, 내가 편집 했어. – user1610719

답변

5

개별적 개체 요소를 구문 분석 할 필요가있다. 이와 같이

다음 __unicode__ 속성이 검색어 세트를 개별 객체에 적용되지 않고,

{% for user in userid %} 
    {{user}} 
{% endfor %} 

- 또는

{% for user in userid %} 
    {{user.name}} 
{% endfor %} 

. 그러므로 문제.

__unicode__Userid 모델에 있는지 확인하십시오. 당신은 단지 이름 목록을 표시하려면

, 당신은 다른 방법

def expand(request): 
    userid = Userid.objects.filter(name__contains="Test").values_list('name', flat=True) 
    return render(request,'expand.html',{'userid':", ".join(list(userid))}) 

을 할 수 있으며, 템플릿은 다음과 같습니다

Userid 모델에서
{{userid}} 
+0

이것은 단지 이전과 똑같은 것으로 나타났습니다. 이제는 목록을 반복하여 dict 대신에 Userid 객체를 두 번 말합니다. – user1610719

+0

예 ..'Userid' 모델에'__unicode__'가없는 것 같습니다 . 기본 값을 표시하려면 iteration에 넣어야합니다. – karthikr

+0

Dur thanks ... 그 질문에 말 그대로, __unicode__와 20 개 정도의 이름을 추가해야합니까 ??? 개발 시간이 엄청나게 낭비되는 것 같습니다. 물론 내 데이터베이스에 액세스 할 수 있기를 원한다면 Django에서 형식을 지정하므로 모든 것을 추가하지 않으면 문자 그대로 데이터베이스에 액세스 할 수 없습니까? – user1610719

1

__unicode__ 방법을 추가 :

class Userid(models.Model): 

    # all your fields 
    class Meta: 
     db_table = 'userID' 

    def __unicode__(self): 
     return unicode('{0} {1}'.format(self.name, self.id)) 
관련 문제