在 Django 中自定义表单字段的查询集并不是一项艰巨的工作。 Like this

但是,假设我有以下模型:

#models.py

class Work(Model):
    name = models.CharfField(...)
    #some fields

class Gallery(Model):
    work = models.ForeignKey(Work)

class Photo(Model):
   gallery = models.ForeignKey(Gallery)

class StageOfWork(Model):
    work = models.ForeignKey(Work)
    gallery = models.ForeignKey(Gallery)
    #some fields

还有一个像这样的 admin.py
#admin.py

class StageOfWorkAdmin(admin.TabularInline):
    model = StageOfWork
    form = StageOfWorkForm
    extra = 1

class WorkAdmin(admin.ModelAdmin):
    inlines = [EtapaObraAdmin]

我有这个问题:当我编辑一个作品时,存在许多 StageOfWorks 的表单内联,这些 StageOfWorks 内联表单有一个画廊选择器。
我需要 像这样自定义这个画廊的查询集 :
class StageOfWorkForm(ModelForm):

    def __init__(self, *args, **kwargs):
        super(StageOfWorkForm, self).__init__(*args, **kwargs)
        if 'instance' in kwargs:
             self.fields['gallery'].queryset = Gallery.objects.filter(work__id=self.instance.work.id)

但这仅适用于正在编辑表单的表单。我需要在 init 方法的上下文中获取工作 id 以执行正确的查询集。

我怎么能那样做?

最佳答案

我能够做到的唯一方法是将您需要的数据传递到表单类的实例中。

即,在您看来:

def view(request):
    ...
    work = <whatever>
    form = StageOfWorkForm(work, request.POST)
    ...

然后,您的表单需要工作对象:
class StageOfWorkForm(ModelForm):
    def __init__(self, work, *args, **kwargs):
        super(StageOfWorkForm, self).__init__(*args, **kwargs)
        self.fields['gallery'].queryset = work.gallery_set.all()

关于python - 如何从使用 Django 中主要表单的 pk 的管理内联自定义字段的查询集?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5108994/

10-13 09:38
查看更多