これは私の問題です。私はの質問、タグ、カテゴリをモデルとして持っており、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は、常に空の配列を取得しますが、データベースではビューがアイテムを返します。
"一種の巨大なスタックオーバーフロー" hehe、あなたは不本意ながら素敵なジョークをしました。 –
これは興味深い質問ですが、詳細が多すぎます。私はあなたのコードを小さなモデルに編集して、まだエラーがあるかどうかを確認することをお勧めします。もしそうでなければ、あなた自身の質問に答えるかもしれません。 – Foon
'questions_list.html'の内容を投稿してください。 "View360QuestionListViewでは、データベースから項目を取得する質問にモデルを変更すると表示されますが、これらのモデルは異なるフィールド名を持っています。したがって、テンプレート内で呼び出す必要があります。 –