gpt4 book ai didi

django - 如何在某些模型管理员中禁用 mptt 的 TreeForeignKey 字段的 Select 小部件中的某些选项?

转载 作者:行者123 更新时间:2023-12-03 10:25:21 29 4
gpt4 key购买 nike

MyModel 有一个 mptt 的 TreeForeignKey 字段 category。在 MyModel 的管理员中,如何禁用此 category 字段的 Select 小部件中的某些选项?

谢谢你

class Category(MPTTModel):
parent = TreeForeignKey('self', blank=True, null=True, related_name='children')
nom = models.CharField(max_length=100)

class MyModel(models.Model):
category = TreeForeignKey(Category)
# more fields

最佳答案

我不得不覆盖 MyModelAdminForm 并使用带有 SelectWithDisabledforms.ChoiceField 字段category 字段的小部件。就我而言,我只希望树的叶子可以选择。

class MyModelAdminForm(forms.ModelForm):

class Meta:
model = MyModel

def __init__(self, *args, **kwargs):
self.level_indicator = kwargs.pop('level_indicator', u'---')
super(MyModelAdminForm, self).__init__(*args, **kwargs)

queryset = Category.objects.all()
mptt_opts = queryset.model._mptt_meta
queryset = queryset.order_by(mptt_opts.tree_id_attr, mptt_opts.left_attr)

choices = []
for item in queryset:
level = getattr(item, item._mptt_meta.level_attr)
value = item.id
label = mark_safe(conditional_escape(self.level_indicator) * level + smart_unicode(item.nom))
if item.is_leaf_node():
choices.append((value, label))
else:
choices.append((value, {'label': label, 'disabled': True}))

self.fields['category'] = forms.ChoiceField(choices=choices, widget=SelectWithDisabled)


class MyModelAdmin(admin.ModelAdmin):
form = MyModelAdminForm

samsic_site.register(MyModel, MyModelAdmin)

关于django - 如何在某些模型管理员中禁用 mptt 的 TreeForeignKey 字段的 Select 小部件中的某些选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14632961/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com