2014-06-30 28 views
0

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

这些机型:

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管理:

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

您正在寻找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测验应用程序。我最近增加了很多更改,如果您可以向回购协议提供任何内容,这将是一件好事: https://github.com/tomwalker/django_quiz