0

私は Django 1.4 の汎用ビューのマニュアルに従ってきましたが、「出版社ごとに本をリストする」例を機能させることができます。私のサイトは、プロパティを予約した人の名前 (または ID) でプロパティの予約をリストしようとしているという点で少し異なります。人々は複数回予約するので、予約内容を確認できるようにしたいと考えています。

これに対する私の views.url は次のとおりです。

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

私のモデルは次のとおりです。

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() は複数の Guest を返しました -- 26 を返しました! ルックアップ パラメータは {} でした

「get」は、私が選択したものではなく、データベース内のすべてのゲストを取得しています。

私はこれを検索して実験するのに何時間も費やしましたが、役に立ちませんでした。「guest = 11」と入力すると動作するため、pk に問題があります。

ありがとうございました!

4

1 に答える 1

0

ゲストを獲得するための基準は何も与えていません。あなたは、事実上「私にゲストをください」と言っただけで、Django は 26 のゲストすべてをあなたに与えました。kwarg でフィルタリングしたい場合は、次のpkように言う必要があります。

self.guest =  get_object_or_404(Guest, pk=self.kwargs['pk'])
于 2013-10-06T18:11:46.380 に答える