在同一个管理页面上是否可能有两个到同一型号的多个关系?

2024-09-29 23:29:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

# 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也有类似的例子

我希望能够独立地编辑BoatQuestionsCarQuestions,但在同一个管理页面上。管理员设置为:

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)

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

是否有任何方法可以在同一个管理页面上显示这些内容,但可以单独更改它们


Tags: tomodeladminmodelsquizclassquestionstextfield
1条回答
网友
1楼 · 发布于 2024-09-29 23:29:05

问题在于你的内线。两个都使用相同的模型,这很好。但是,由于您只想显示某些Question,因此必须调整每个内联的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')

相关问题 更多 >

    热门问题