如何从模型函数中获取数据以显示在 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)
如何让 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)