是否可以在同一个管理页面上对同一个模型有两个多对多关系?

我对测验和相关问题进行建模如下:


# models

class Question(models.Model):

    title = models.TextField()

    category = models.TextField()



class Quiz(models.Model):

    questions = models.ManyToManyField(Question, through='OrderedQuestion')



class OrderedQuestion(models.Model):

    # A through table to allow ordering of questions

    question = models.ForeignKey(Question, ...)

    quiz = models.ForeignKey(Quiz, ...)

    order = models.PositiveIntegerField(default=0)

我有两种类型的问题由代理模型处理:


# proxy models to handle specific question categories

class BoatQuestion(Question):

     objects = BoatQuestionManager()  # handles setting category


     class Meta:

         proxy = True

和一个类似的CarQuestion。


我希望能够编辑BoatQuestions和CarQuestions彼此独立,但在同一个管理页面上。管理员设置是:


class BoatQuestionInline(admin.TabularInline):

    model = BoatQuestion.quiz.through



class CarQuestionInline(admin.TabularInline):

    model = CarQuestion.quiz.through



class QuizAdmin(admin.ModelAdmin):

    model = Quiz

    inlines = (BoatQuestionInline, CarQuestionInline)

但是每当我更改船问题部分中的问题时,汽车部分中的问题就会更新以匹配它,反之亦然。


有什么办法可以在同一个管理页面上显示这些但独立更改它们?


慕姐8265434
浏览 219回答 1
1回答

蓝山帝景

问题在于您的内联。您对两者使用相同的模型,这很好。但是由于您只想显示某些Questions,您必须QuerySet为每个内联调整并添加适当的.filter(). (我在这里猜测,您如何区分问题的类别。)class BoatQuestionInline(admin.TabularInline):    model = BoatQuestion.quiz.through    def get_queryset(self, *args, **kwargs):        return OrderedQuestion.objects.filter(question__category='boat')class CarQuestionInline(admin.TabularInline):    model = CarQuestion.quiz.through    def get_queryset(self, *args, **kwargs):        return OrderedQuestion.objects.filter(question__category='car')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python