嗨,我还是django的新手。我计划创建一个管理员,我可以添加一个测验,问题和选择。测验有问题,问题有选择。我只能做(测验和问题)和(问题和选择)。
这是我的模特。
class Quiz(models.Model):
quiz_title = models.CharField(max_length=200)
created_date = models.DateTimeField('date created')
expired_date = models.DateTimeField(
null=True, blank=True)
def __str__(self):
return self.quiz_title
class Question(models.Model):
quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE)
question_text = models.CharField(max_length=200)
answer = models.CharField(max_length=200,blank=True)
def __str__(self):
return self.question_text
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
def __str__(self):
return self.choice_text
class UserSession(models.Model): #for future use.
user = models.ForeignKey(User)
quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE)
question = models.ForeignKey(Question, on_delete=models.CASCADE)
user_answer = models.CharField(max_length=200)
这是我的管理员 来自django.contrib import admin
# Register your models here.
from .models import Choice, Question, Quiz
class ChoiceInline(admin.TabularInline):
model = Choice
extra = 3
class QuestionInline(admin.TabularInline):
model = Question
extra = 3
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date Information', {'fields': ['question_text'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
list_filter = ['question_text']
search_fields = ['question_text']
list_display = ('question_text',)
class QuizAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['quiz_title']}),
('Date Information', {'fields': ['created_date'], 'classes': ['collapse']}),
]
inlines = [QuestionInline]
list_filter = ['created_date']
search_fields = ['quiz_title']
list_display = ('quiz_title', 'created_date')
admin.site.register(Quiz, QuizAdmin)
#~ admin.site.register(Question, QuestionAdmin)
答案 0 :(得分:0)
Django不支持嵌套的内联,而不是自己构建此功能,也不使用管理员嵌套的内联应用程序,但我并不是最新的。
一种常见的模式是直接链接到您的子对象作为新的ModelAdmin
视图。
创建一个呈现链接的只读字段。
class QuestionInline(admin.TabularInline):
model = Question
extra = 3
readonly_fields = ('link', )
def link(self, obj):
return '<a href="%s" target="_blank">Edit</a>' % reverse('admin:appname_modelname_change', args=[obj.id])
link.allow_tags = True