在管理员管理器中添加2个模型

时间:2014-06-30 03:27:09

标签: python django django-models django-admin

我有2个模型,问题和图像。我想在django admin中创建一个管理器,在Question管理面板中包含Image字段。

这些是模型:

class Question(models.Model):

    quiz = models.ManyToManyField(Quiz, blank=True, )

    category = models.ForeignKey(Category, blank=True, null=True, )

    content = models.CharField(max_length=1000, 
                               blank=False, 
                               help_text="Enter the question text that you want displayed",
                               verbose_name='Question',
                               )

    explanation = models.TextField(max_length=2000,
                                   blank=True,
                                   help_text="Explanation to be shown after the question has been answered.",
                                   verbose_name='Explanation',
                               )


    class Meta:
        verbose_name = "Question"
        verbose_name_plural = "Questions"
        ordering = ['category']


    def __unicode__(self):
        return self.content



class Image(models.Model):
    TYPE_CHOICES = (
        ('A','Answer'),
        ('Q','Question'),
    )
    image = models.ImageField(upload_to='static/img')
    type = models.CharField(max_length=1, choices=TYPE_CHOICES)
    question = models.ForeignKey(Question, blank=True, null=True)
    answer = models.ForeignKey(Answer, blank=True, null=True)

    def __unicode__(self):
        return self.type

这是Django Admin中的问题管理器:

class QuizAdminForm(forms.ModelForm):
    class Meta:
        model = Quiz

    questions = forms.ModelMultipleChoiceField(
                                               queryset=Question.objects.all(),
                                               required=False,
                                               widget=FilteredSelectMultiple(verbose_name=('Questions'),
                                                                             is_stacked=False                                                                           )
                                               )

    def __init__(self, *args, **kwargs):
        super(QuizAdminForm, self).__init__(*args, **kwargs)
        if self.instance.pk:
            self.fields['questions'].initial = self.instance.question_set.all()

    def save(self, commit=True):
        quiz = super(QuizAdminForm, self).save(commit=False)
        if commit:
            quiz.save()
        if quiz.pk:
            quiz.question_set = self.cleaned_data['questions']
            self.save_m2m()
        return quiz

1 个答案:

答案 0 :(得分:1)

您正在寻找InlineModelAdmin型号。

class ImageInline(admin.TabularInline):
    model = Image
    ...

class QuestionAdmin(admin.ModelAdmin):
    list_display = ('content', 'category', )
    list_filter = ('category',)
    fields = ('content', 'category', 'quiz', 'explanation')

    search_fields = ('content', 'explanation')
    filter_horizontal = ('quiz',)

    inlines = [AnswerInline, ImageInline]

https://docs.djangoproject.com/en/1.6/ref/contrib/admin/#inlinemodeladmin-objects

很高兴看到您正在使用Django Quiz应用程序。我最近添加了很多更改,如果你可以为回购贡献任何东西,那将是很好的: https://github.com/tomwalker/django_quiz