限制/过滤Django管理中的外键选择

2024-09-29 22:05:16 发布

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

考虑一个可以让人们参加比赛的应用程序。在

我有一个ContestContestProblem模型。我想为比赛提供以下功能:

  1. 比赛可能有很多问题
  2. 一个问题不能出现在多个竞赛中

在我的models.py中,我有:

class ProblemsInContest(CreateUpdateDateModel):
    contest = models.ForeignKey(Contest)
    problem = models.ForeignKey(ContestProblem)

    class Meta:
        verbose_name = "Problem in Contest"
        verbose_name_plural = "Problems in Contest"

    def __str__(self):
        return "{problem}".format(problem=self.problem)

在我的管理员py,我有:

^{pr2}$

我的管理表单如下所示: enter image description here

我正在使用Django管理添加问题的比赛。问题是在problem下拉列表中,它显示了所有的ContestProblem,但是我想把它限制在那些没有出现在任何其他竞赛中的{}。在

任何提示,建议或参考,以达到预期的结果将高度赞赏。在


Tags: nameinpy模型self功能应用程序verbose
1条回答
网友
1楼 · 发布于 2024-09-29 22:05:16
class ContestProblemInline(admin.TabularInline):

    model = ProblemsInContest

    def formfield_for_foreignkey(self, db_field, request=None, **kwargs):

        field = super(RoomInline, self).formfield_for_foreignkey(db_field, request, **kwargs)

        if db_field.name == 'your_field_name':
            if request._obj_ is not None:
                field.queryset = field.queryset.filter(your_field_name = request._obj_)  
            else:
                field.queryset = field.queryset.none()

        return field



class ContestAdmin(admin.ModelAdmin):

    inlines = (ContestProblemInline,)

    def get_form(self, request, obj=None, **kwargs):
        # just save obj reference for future processing in Inline
        request._obj_ = obj
        return super(ContestAdmin, self).get_form(request, obj, **kwargs)

相关问题 更多 >

    热门问题