2017-12-20 19 views
-2

これは私の問題です。私はの質問、タグ、カテゴリをモデルとして持っており、q &のウェブサイトを構築しています。私はdjangoジェネリッククラスベースのビューを他のデータベースで使用して質問リストをデータベースに表示したい。djangoジェネリッククラスベースのビューをデータベースビューでモデルとして使用できますか?

私は既にQuestionクラスを使っていますが、質問カテゴリやタグのような別のモデルに属する詳細はすべて持っていないので、データベースビューを作成することにしました。ここで

私は戻ってくるときに私はそれがデータベースからアイテムを取得の質問にモデルを変更したときに、私のモデルモジュールはView360QuestionListViewで

from django.db import models 
from ckeditor_uploader.fields import RichTextUploadingField 




class QuestionCategory(models.Model): 

    name = models.CharField(max_length = 255, help_text="question") 
    created_at = models.DateTimeField(auto_now_add=True) 
    last_edited_at = models.DateTimeField(auto_now=True) 
    image = models.FileField() 


    def __str__(self): 

     return self.name 

class QuestionTag(models.Model): 
    title = models.CharField(max_length=255, primary_key=True) 
    description = models.TextField(null = True) 

    def __str__(self): 
     return self.title 


class Question(models.Model): 

    title = models.CharField(max_length=1024) 
    nb_views = models.IntegerField(default=0) 
    anonymously = models.BooleanField(default = True) 
    created_at = models.DateTimeField(auto_now_add=True) 
    last_edited_at = models.DateTimeField(auto_now=True) 
    details = RichTextUploadingField(null = True) 
    #une question appartient à une seule catégorie 
    category = models.ForeignKey('QuestionCategory', on_delete=models.SET_NULL, null=True) 
    tags = models.ManyToManyField(QuestionTag, help_text="Selectionnez un tag pour cette question") 

    def __str__(self): 
     return self.title 


    def get_absolute_url(self): 
     return reverse('question-detail', args=[str(self.id)]) 

class Answer(models.Model): 
    nb_upvotes = models.IntegerField(default=0) 
    nb_downvotes = models.IntegerField(default=0) 
    nb_views = models.IntegerField(default = 0) 
    details = RichTextUploadingField() 
    question = models.ForeignKey(Question, on_delete=models.SET_NULL, null=True) 
    created_at = models.DateTimeField(auto_now_add=True) 
    last_edited_at = models.DateTimeField(auto_now=True) 

    def __str__(self): 
     return "Answer " + str(self.id) 


class AnswerComment(models.Model): 
    nb_upvotes = models.IntegerField(default=0) 
    nb_downvotes = models.IntegerField(default =0) 
    details = models.TextField() 
    answer = models.ForeignKey(Answer, on_delete=models.CASCADE) 
    parent = models.ForeignKey('self', on_delete=models.CASCADE) 
    created_at = models.DateTimeField(auto_now_add=True) 
    last_edited_at = models.DateTimeField(auto_now=True) 


class View360Question(models.Model): 
    id = models.BigIntegerField(primary_key=True) 
    title = models.TextField(max_length=1024) 
    nb_views = models.IntegerField() 
    created_at = models.DateTimeField() 
    last_edited_at = models.DateTimeField() 
    nb_answers = models.IntegerField() 
    tags = models.TextField() 
    category_name = models.TextField() 
    category_id = models.IntegerField() 

    def __str__(self): 
     return self.title 

    class Meta: 
     managed = False 
     db_table = "qanda_view360question" 

そして、ここが私の見解モジュールである

from django.shortcuts import render 
from django.views import generic 
from .models import Question, View360Question, QuestionCategory, Answer, QuestionTag, AnswerComment 

# Create your views here. 

def index(request): 

    #on récupère le nombre de questions 
    num_questions = Question.objects.all().count() 

    #nombre de questions anonymes 
    num_anonym_questions = Question.objects.filter(anonymously= True).count() 

    #nombre de réponses 
    num_answers = Answer.objects.all().count() 

    #nombre de Catégories 
    num_categories = QuestionCategory.objects.all().count() 

    return render(
     request, 
     'index.html', 
     context={'num_questions': num_questions, 'num_anonym_questions': num_anonym_questions, 
     'num_answers': num_answers, 'num_categories': num_categories} 
    ) 



def qaIndex(request): 

    return render(request, 'qa.html') 


def categoriesIndex(request): 

    return render(request, 'categories_index.html') 


class View360QuestionListView(generic.ListView): 
    model = View360Question 
    template_name = 'questions/questions_list.html' 

ですが、私が作成したビューであるView360Questionは、常に空の配列を取得しますが、データベースではビューがアイテムを返します。

+2

"一種の巨大なスタックオーバーフロー" hehe、あなたは不本意ながら素敵なジョークをしました。 –

+0

これは興味深い質問ですが、詳細が多すぎます。私はあなたのコードを小さなモデルに編集して、まだエラーがあるかどうかを確認することをお勧めします。もしそうでなければ、あなた自身の質問に答えるかもしれません。 – Foon

+0

'questions_list.html'の内容を投稿してください。 "View360QuestionListViewでは、データベースから項目を取得する質問にモデルを変更すると表示されますが、これらのモデルは異なるフィールド名を持っています。したがって、テンプレート内で呼び出す必要があります。 –

答えて

0

Guillermo chamorroが言ったように、問題は私のテンプレート ではなくviewname_listを使っていました。私はquestion_listを使用しました。 ありがとうございます。

関連する問題