Django: объект 'Страна' не имеет атрибута 'все' - PullRequest
0 голосов
/ 05 февраля 2020

Всякий раз, когда я пытаюсь получить доступ к своей модели "Youtube" из django admin, она показывает мне эту ошибку. Я чувствую, что испортил это в YoutubeAdmin, внутри getCountry метода. Как я могу решить это? Не могу найти способ. В сообщении указано model Youtube doesn't have a filed getCountry.

Моя модель:

class Youtube(models.Model):
    link = models.CharField(max_length=2000)
    scrap_interval_hour = models.IntegerField(default=8)
    last_scrapped_datetime = models.DateTimeField(blank=True, null=True)
    is_feed = models.BooleanField(default=False)
    created_date = models.DateField(
        auto_now_add=True)
    # Foriegn Key
    country = models.ForeignKey(Country, on_delete=models.CASCADE)

    class Meta:
        ordering = ('created_date', )

admin

from django.contrib import admin
from fpn.models import Youtube
from datetime import timedelta

class YoutubeAdmin(admin.ModelAdmin):
    def get_fields(self, request, youtube=None):
        fields = super(YoutubeAdmin, self).get_fields(request, youtube)
        fields.remove('last_scrapped_datetime')

        if youtube:
            fields.remove('country')
        return fields

    model = Youtube
    list_per_page = 10
    list_display = ('link', 'is_feed',
                    'getCountry', 'last_scrapped_datetime')
    list_filter = ('country', 'is_feed', )

    def getCountry(self, obj):
        return "\n".join([coun.name for coun in obj.country.all()])

1 Ответ

3 голосов
/ 05 февраля 2020

ForeignKey создать отношение многие-к-одному. Это означает, что для одной страны вы можете иметь много объектов Youtube. Но не наоборот, один объект Youtube может иметь только одну страну.

Так что в вашем случае вы не можете запросить список стран из объекта youtube. Поскольку он имеет только одну связанную страну, к которой вы можете получить прямой доступ:

def getCountry(self, obj):
   return obj.country.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...