Как я могу получить данные от функций модели для отображения в Django Admin? - PullRequest
0 голосов
/ 26 марта 2020

Как я могу получить данные для 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)

1 Ответ

1 голос
/ 26 марта 2020

Если вы хотите sh отобразить результат на странице списка ,

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)

Update-1

, чтобы получить значение метода в Для просмотра деталей / изменений вам необходимо создать форму модели и связать ее в 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)
...