2016-05-16 8 views
0

私の最初のアプリ(コース)ではコースを作成しています。各コースにはチャプター数があり、各チャプターにはクイズがあります。 2番目のアプリ(クイズ)を使用してクイズを作成しようとしています。 models.py(クイズ):Djangoでの外部キーフィールドの設定

class Quiz(models.Model): 
    coursechapter = models.ForeignKey(CourseChapter) 
    name = models.CharField(max_length=255, verbose_name=u'Quiz name',) 
    creator = models.ForeignKey(User) 
    creation = models.DateField(auto_now_add=True) 
    def __unicode__ (self): 
     return self.name 

class Question(models.Model): 
    quiz = models.ForeignKey(Quiz) 
    text = models.CharField(max_length=255, verbose_name=u'Question\'s text') 


class QuestionAnswer(models.Model): 
    question = models.ForeignKey(Question) 
    text = models.CharField(max_length=255, verbose_name=u'Answer\'s text') 
    is_valid = models.BooleanField(default=False) 

class UserAnswer(models.Model): 
    answer = models.ForeignKey(QuestionAnswer) 

私はコースを作成するためのテンプレートを持っているが、そのテンプレートの内側に私は章を作成するための別のテンプレート(ビュー)に私を取るのリンクを(章を追加)を持っています。内部には、その特定の章のクイズを作成するためのリンクがあります。そのリンクは、view.py(クイズアプリから)で表されるurl:/ quiz/new(クイズアプリからurl.pyを使用)につながります。 問題私はクイズを作成しているチャプターのIDを取得する方法がわかりません。チャプターURLの例(ユーザーがCreate Quizをクリックする前に)/ course/new/chapter/197 /、何とかchapter_id(197)をリンク経由で送ることができますか? views.py(クイズ):

class CreateQuizView(CreateChapterView): 
    model = Quiz 
    template_name = 'quiz/create_quiz.html' 
    fields = '__all__' 

    def dispatch(self, request, *args, **kwargs): 
     self.pk = kwargs.get('pk') 
     return super(CreateQuizView, self).dispatch(request, *args, **kwargs) 
    def get_success_url(self): 
     return reverse('quiz-list', 
            kwargs={'pk': Quiz.objects.latest('id').id}) 

    def get_context_data(self, **kwargs):  

     context = super(CreateQuizView, self).get_context_data(**kwargs) 
     return context 

views.py(コース):(メイン)

url(r'^course/', include('course.urls')), 
url(r'^quiz/', include('quiz.urls', namespace="quiz")), 

のURL(コース)

url(r'^new/$', course.views.CreateCourseView.as_view(), 
    name='courses-new',), 
url(r'^new/(?P<pk>\d+)/$', course.views.CreateChapterView.as_view(), 
    name='courses-chapters'), 
url(r'^edit/(?P<pk>\d+)/$', course.views.UpdateCourseView.as_view(), 
     name='courses-edit',), 
url(r'^new/chapter/(?P<pk>\d+)/$', course.views.CreateChapterView.as_view(), 
     name='chapter-content',), 
url(r'^edit/chapters/(?P<pk>\d+)/$', course.views.UpdateChapterView.as_view(), 
     name='chapters-edit',), 

class CreateChapterView(CreateView, GroupRequiredMixin): 
    model = CourseChapter 
    template_name = 'course/add_chapter.html' 
    fields = '__all__' 
    def dispatch(self, request, *args, **kwargs): 
     self.pk = kwargs.get('pk') 
     return super(CreateChapterView, self).dispatch(request, *args, **kwargs) 
    def get_success_url(self): 
     return reverse('courses-chapters', 
            kwargs={'pk': Course.objects.latest('id').id}) 

    def get_context_data(self, **kwargs):  

     context = super(CreateChapterView, self).get_context_data(**kwargs) 
     context['chapter'] = CourseChapterForm 
     context['chapters'] = CourseChapter.objects.all() 
     context['last'] = Course.objects.latest('id') 
     context['courses'] = Course.objects.all() 
     context['action'] = reverse('courses-chapters', 
            kwargs={'pk': Course.objects.latest('id').id}) 
     context['kw'] = self.kwargs 
     context['quiz'] = QuizForm() 
     context['question'] = QuestionForm() 
     context['answer'] = QuestionAnswerForm 

     return context 

    def form_valid(self, form): 
     self.object = form.save() 
     # chapters = CourseChapter.objects.filter(course_id=Course.id) 
     return HttpResponseRedirect(self.get_success_url()) 

urls.py

URL(クイズ):

urlpatterns = [ 
    url(r'^$', quiz.views.ListQuizView.as_view(), 
     name='quiz-list',), 
url(r'^new/$', quiz.views.CreateQuizView.as_view(), 
    name='quiz-new',), 
    ] 
+0

あなたのURLを共有する – Anoop

答えて

0

チャプターを作成するページにクイズを作成するためのリンクがあると述べました。私は、リンク自体を作成することをお勧めします。例えばのために

をはじめと呼ばれる章を持っており、それはID 7を持っている、あなたは、このような/add-quiz/chapter/chapter_idとしてあなたのURLをフォーマットすることができます「Pythonは学習」あなたがコースを持って言うことができます。ビューから渡すと、ページに章が表示されます。

+0

This is current link: Create Quizどのように私はビューからIDを渡すことができますか?私のURLのconfはどのように見えるでしょうか? – ssapp

+0

Create Quizのurlconfは/ add-quiz/chapter /(?P \ d +)/にすることができます。この特定のテンプレートに章のインスタンスがあることがわかります。 –

+0

gr8!もう1つ、クイズを最初に作成することなく質問をペアにすることは可能ですか(外部キーの関係)、質問のためだけに別のビューとテンプレートを作成する必要がありますか?私はあなたに何を求めようとしているのか理解していますか? – ssapp

0

URL形式を/quiz/newから/quiz/new/<chapter id>に変更してください。

chapter idcreate quizビューから取得できます。

+0

チャプターIDを取得するにはどうすればいいですか?そして、その方法でIDを取得することができますので、私はクイズを作成して同じテンプレートで編集できますか? – ssapp

+0

チャプターAPIの応答を作成するには、 'chapter_id'という余分なフィールドを1つ返します。 create quiz apiを呼び出すときにこのchapter_idを使用します。 thats – Anoop

+0

あなたはこのようなchapter_idを渡すことができます Anoop

関連する問題