如何从模型函数中获取数据以显示在 Django Admin 中?

How do I can I get data from model functions to appear in Django Admin?

如何让 get_num_states 的数据显示为一个字段,显示一个国家/地区的州数,在 Django Admin 中,我拥有一个国家/地区的每条记录?我知道 get_num_states 似乎可以正常工作,因为我能够在 html 模板中显示来自函数的信息。但是我目前没有看到它显示在 Django Admin 中。

class Country(models.Model):
    country_name = models.CharField(max_length=50)
    create_date = models.DateTimeField()

    def get_num_states(self):
        return State.objects.filter(country=self.id).count()

    def __str__(self):
        return self.country_name

class State(models.Model):
    state_name = models.CharField(max_length=50)
    country = models.ForeignKey(Country, on_delete=models.CASCADE)

如果您希望在列表页面显示结果

class CountryAdmin(admin.ModelAdmin):
    list_display = ('id', 'country_name', <b>'states_count'</b>)

    <b>def states_count(self, instance):
        return instance.get_num_states()</b>


admin.site.register(Country, CountryAdmin)

更新 1

要在 detail/change 视图中获取方法值,您必须创建一个模型表单,并且 link 在 django admin

中相同
<b>class MyModelForm(forms.ModelForm):
    states_count = forms.IntegerField(disabled=True)

    class Meta:
        model = Country
        fields = ('country_name', 'states_count')

    def get_initial_for_field(self, field, field_name):
        if field_name == 'rating':
            if self.instance:
                return self.instance.get_num_states()
            return None
        return super().get_initial_for_field(field, field_name)</b>


class CountryAdmin(admin.ModelAdmin):
    <b>form = MyModelForm</b>


admin.site.register(Country, CountryAdmin)