Skip to main content
 首页 » 编程设计

python之Django管理员仅当Selectbox具有特定值时才显示字段

2024年08月22日27zhengyun_ustc

模型.py

class FixedIncome(Asset): 
   isin = models.CharField(max_length=6, blank=False) 
   coupon = models.DecimalField(max_digits=7, decimal_places=4, help_text="Percent") 
   payment_frequency = models.ForeignKey(PaymentFrequency) 
   months = models.ManyToManyField(Month, blank = False, verbose_name = "Payment months") 
   duration = models.DecimalField(max_digits=4, decimal_places=2, default='0') 
   maturity_date = models.DateTimeField(default=datetime.now, blank=False) 
 
   class Meta: 
      verbose_name_plural = "Fixed Income" 

我想让 django admin 显示 maturity_date 属性,前提是选择了月份(数字 1 到 12,选择框)。我读过一些关于 js 的东西,但我做不到 :(

请您参考如下方法:

我解决了使用 jquery 并在我的 ModelAdmin 上添加一个类 Media

管理员.py

class FixedIncomeAdmin(admin.ModelAdmin): 
model = FixedIncome 
can_delete = False 
list_display = ['name', 'country', 'industry', 'isin', 'coupon', 'payment_frequency'] 
list_filter = ['name', 'isin', 'country', 'industry'] 
search_fields = ['name', 'isin', 'country', 'industry'] 
 
class Media: 
    js = ('/static/admin/js/assets_admin.js',) 

assets_admin.js

django.jQuery('#id_payment_frequency').change(function(){ 
if(django.jQuery("#id_payment_frequency option:selected").text() == 0) 
    { 
        django.jQuery(".form-row.field-months").hide(); 
    }else 
    { 
        django.jQuery(".form-row.field-months").show(); 
    } 
}); 

如果“payment_frequency”(0 到 12)的选择框有一个 0,则月份隐藏在表单中

希望对某人有所帮助! :)