为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕姐8265434 2021-07-16 14:01:42
我对测验和相关问题进行建模如下:# modelsclass 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 categoriesclass BoatQuestion(Question):     objects = BoatQuestionManager()  # handles setting category     class Meta:         proxy = True和一个类似的CarQuestion。我希望能够编辑BoatQuestions和CarQuestions彼此独立,但在同一个管理页面上。管理员设置是:class BoatQuestionInline(admin.TabularInline):    model = BoatQuestion.quiz.throughclass CarQuestionInline(admin.TabularInline):    model = CarQuestion.quiz.throughclass QuizAdmin(admin.ModelAdmin):    model = Quiz    inlines = (BoatQuestionInline, CarQuestionInline)但是每当我更改船问题部分中的问题时,汽车部分中的问题就会更新以匹配它,反之亦然。有什么办法可以在同一个管理页面上显示这些但独立更改它们?
查看完整描述

1 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

问题在于您的内联。您对两者使用相同的模型,这很好。但是由于您只想显示某些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')


查看完整回答
反对 回复 2021-07-28
  • 1 回答
  • 0 关注
  • 218 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号