2014-03-31 63 views
1

我有一個挑戰,我希望你能幫助我過來。TemplateView with forms - 'unicode'object has no attribute'get'

上午爲電影票預訂製作了django驅動的應用程序,並在表單上顯示出來。

當用戶點擊一個特定的電影,我想呈現的是有一個表單,用戶可以選擇他/她的票樣票號,座位號,日期等

不過的選項頁面,我的表單會返回數據庫中的所有電影。

我希望能夠僅返回用戶點擊的電影,看到此視圖已經返回用戶點擊的特定電影。我怎樣才能做到這一點?

我目前的方法給了我一個exception error 'unicode' object has no attribute 'get'

在我forms.py我有這個

class MoviePaymentsForm(forms.ModelForm): 

    def __init__(self, *args, **kwargs): 

     super(MoviePaymentsForm, self).__init__(*args, **kwargs) 
     movie = forms.ModelChoiceField(queryset=Movie.objects.get(slug=args[0])) 

,並在我的views.py我有這個

class SpecificMovieTemplateView(TemplateView): 
    model = Movie 
    template_name = 'movie.html' 

    def get_context_data(self, *args, **kwargs): 

     context = super(SpecificMovieTemplateView, self).get_context_data(**kwargs) 
     context['movie'] = Movie.objects.get(slug=kwargs['movieslug']) 
     print 'Movie ID is ==> ' + str(context['movie'].id) 
     context['form_movie'] = MoviePaymentsForm(kwargs['movieslug']) 
     return context 
在我的模型

。 py我有這個

class MoviePayments(TimeStampedModel): 
    uuid_placement = shortuuid.encode(uuid.uuid4()) 
    short_uuid = uuid_placement[:8] 
    reference_id = models.CharField(max_length=8, blank=True, unique=True, 
             default="%s" % str(short_uuid)) 
    movie = models.ForeignKey(Movie) 
    ticket = models.ForeignKey(Ticket) 
    quantity = models.IntegerField() 
    date = models.ForeignKey(MovieShowDate) 
    time = models.ForeignKey(MovieShowTimes) 
    paid_for = models.BooleanField(default=False, blank=False) 
    mm_transaction_id = models.CharField(max_length=100, blank=True) 
+1

粘貼完全追蹤。在哪條線上出現錯誤 –

+0

嗨,艾倫,謝謝你的及時回覆。請在這裏找到==> http://dpaste.com/1766050/ – Chano

回答

2

我終於想通了。像Bogdan指出的那樣,我需要在init方法中將slug字段作爲參數傳遞,並使用queryset上的過濾器來返回特定的電影,如下所示

class MoviePaymentsForm(forms.ModelForm): 

def __init__(self, slug, *args, **kwargs): 
    super(MoviePaymentsForm, self).__init__(*args, **kwargs) 
    self.fields['movie'].queryset = Movie.objects.filter(slug=slug) 
1

問題是您將movie_slug作爲第一個參數傳遞給窗體: context['form_movie'] = MoviePaymentsForm(kwargs['movieslug'])並且窗體的第一個參數是數據字典。修改的形式是這樣的:

class MoviePaymentsForm(forms.ModelForm): 

    def __init__(self, slug=None, *args, **kwargs): 

     super(MoviePaymentsForm, self).__init__(*args, **kwargs) 
     movie = forms.ModelChoiceField(queryset=Movie.objects.get(slug=slug)) 

還是從的args列表中刪除類似的說法:slug = args.pop(0)

+0

您好波格丹,感謝您的指導,雖然它不適合我,但它指導我尋找我在下面發佈的解決方案 – Chano

相關問題