0

私は属性を持つモデルJarを持っています-モデルへの。モデルには、次の行である属性(保持できる jar の数) とプロパティ (現在保持している jar の数) があります 。crateForeignKeyCrateCratecapacityjarsreturn self.jar_set.filter(is_active=True).count()

複数の jar を新しいクレートに移動する管理アクションがあります。中間ページを使用して宛先クレートを選択します。現在、すべてのクレートがドロップダウンにリストされていますが、リストされているクレートを、選択した jar の数に余裕があるものだけに制限したいと考えています。どのように?

からの管理アクションは次のadmin.pyとおりです。

class MoveMultipleJarsForm(forms.Form):
    # This needs to somehow be restricted to those crates that have room
    dest = forms.ModelChoiceField(queryset=Crate.objects.all().order_by('number'))

def move_multiple_jars(self, request, queryset):
    form = None

    if 'apply' in request.POST:
        form = self.MoveMultipleJarsForm(request.POST)

        if form.is_valid():
            dest = form.cleaned_data['dest']

            count = 0
            for jar in queryset:
                jar.crate = dest
                jar.save()
                count += 1

            plural = ''
            if count != 1:
                plural = 's'

            self.message_user(request, "Successfully moved %d jar%s to %s" % (count, plural, dest))
            return HttpResponseRedirect(request.get_full_path())
    if not form:
        form = self.MoveMultipleJarsForm()

    return render(request, 'admin/move_multiple_jars.djhtml', {
        'jars': queryset,
        'move_multiple_jars_form': form,
        })

move_multiple_jars.short_description = "Move multiple jars to new crate"
4

1 に答える 1