2013-10-06 6 views
0

나는 Django 1.4의 일반 뷰에 대한 매뉴얼을 따라 왔지만 작동시키기 위해 'list book by publisher'예제를 얻을 수 있습니다. 내 사이트는 내가 부동산을 예약하는 사람의 이름 (또는 id)으로 부동산 예약을 나열하려고하는데 약간 다릅니다. 사람들은 두 번 이상 예약 할 것이므로 예약 내용을 볼 수 있기를 바랍니다.django 클래스 기반 뷰 키워드

class GuestBookingListView(DetailView): 

context_object_name = 'guest_booking' 
template_name = 'guest_booking.html' 

def get_queryset(self): 
    self.guest = get_object_or_404(Guest) 
    return Booking.objects.filter(guest = self.guest) 

def get_context_data(self, **kwargs): 
    context = super(GuestBookingListView, self).get_context_data(**kwargs) 
    context['guest'] = self.guest 
    return context 

내 모델은 다음과 같습니다 :

이에 대한 나의 views.url이다

class Guest(models.Model): 
first_name = models.CharField(max_length=30) 
last_name = models.CharField(max_length=50) 
spouse_first = models.CharField(max_length=30, blank=True) 
spouse_last = models.CharField(max_length=50, blank=True) 
num_child = models.IntegerField(verbose_name='Number of children') 
address = models.TextField(max_length=50, blank=True) 
city = models.CharField(max_length=60, blank=True, verbose_name='Town/City') 
state_province = models.CharField(max_length=30, blank=True, verbose_name='County') 
post_code = models.CharField(max_length=8, blank=True) 
country = models.CharField(max_length=50, blank=True) 
email = models.EmailField(blank=True) 
landline = models.CharField(max_length=25, blank=True) 
mobile = models.CharField(max_length=25, blank=True) 

def __unicode__(self): 
    return u'%s %s' % (self.first_name, self.last_name) 

class Booking(models.Model): 
    guest = models.ForeignKey(Guest) 
    ack_date = models.DateField(verbose_name='Date acknowledged') 
    start_date = models.DateField(verbose_name='Start date') 
    end_date = models.DateField(verbose_name='End date') 
    dep_recd = models.DateField(null=True, blank=True, verbose_name='Deposit received') 
    bal_recd = models.DateField(null=True, blank=True, verbose_name='Balance received') 
    keys_sent = models.DateField(null=True, blank=True, verbose_name='Date keys sent') 
    sec_retn = models.DateField(null=True, blank=True, verbose_name='Security deposit returned') 
    rtm_sent = models.IntegerField('Status', blank=True) 
    notes = models.TextField(blank=True, verbose_name='Notes') 

내 urls.py는 다음과 같습니다

url(r'^guests/(?P<pk>\d+)/$', GuestBookingListView.as_view (
    #context_object_name = 'booking_list', 
    )), 

지금까지 내가 볼 수있는 이 예제는 다른 필드 이름과 동일하지만 결과는 다음과 같습니다.

get()가 두 개 이상 반환되었습니다. 게스트가 26을 반환했습니다. 조회 매개 변수는 {

입니다. 'get'은 내가 선택한 항목이 아닌 데이터베이스의 모든 손님을 검색합니다.

나는 이것에 대한 검색과 실험에 많은 시간을 할애했지만 아무 소용이 없습니다. '손님 = 11'을 입력하면 작동하므로 Pk에 문제가있는 것입니다.

감사합니다.

답변

0

게스트를 얻는 데 필요한 기준을 지정하지 않았습니다. 당신은 방금 사실상 "내게 손님을 줘"라고 말했고, 장고는 26 가지를 모두 당신에게주었습니다. pk kwarg로 필터링하려면 다음과 같이 말하십시오.

self.guest = get_object_or_404(Guest, pk=self.kwargs['pk']) 
+0

Daniel. 감사합니다. 나는 그것이 그와 비슷한 것이어야한다는 것을 알았지 만 올바른 형식을 찾을 수 없었습니다. – sidestrand

관련 문제