Использование contentType для raw_id_fields - PullRequest
1 голос
/ 07 августа 2010

В моем приложении у меня есть определение модели, например:

class SomeModel(models.Model):
    someFK = Models.ForeignKey(SomeModel, null=True, blank=True)
    otherFK = Models.ForeignKey(OtherModel, null=True, blank=True)
    ...

Эта модель хранит данные о журналах, и существует более 1 типа модели для регистрации, поэтому я ставлю FK для каждогоРодственная модель.Для каждой записи используется только один из FK, другой набор FK - NULL = True.

Но я не хочу менять свою модель, когда мне нужно зарегистрировать какую-то другую вещь.Поэтому я изменил свою модель так:

class SomeModel(models.Model):
    content_type = models.ForeignKey(ContentType)
    content_id = models.IntegerField()

Итак, я использовал следующее, чтобы получить то, что я хочу:

content_type.get_object_for_this_type(id=content_id)

Все нормально.Но когда в игру вступает admin.py, это вызывает проблему, потому что у меня есть более 1.000.000 данных для регистрации некоторых связанных моделей, поэтому мне нужно использовать raw_id_fields.Поскольку у меня нет FK для каждой связанной модели, я должен использовать модель ContentType и content_id, но я не знаю, как это сделать с помощью ContentType?

Ответы [ 2 ]

3 голосов
/ 08 апреля 2015

Django grappelli расширяет функциональные возможности администратора Django в универсальном поиске . Таким образом, ваш ModelAdmin может иметь что-то вроде:

class SomeModelAdmin(ModelAdmin):
    related_lookup_fields = {
        'generic': [['content_type', 'object_id'], ],
    }

Result

Это решает мою проблему с поиском. Я надеюсь, что это решит и вашу проблему.

1 голос
/ 16 октября 2010

Я знаю, что это не дает точного ответа на ваш вопрос, но вы должны использовать общие отношения вместо нескольких внешних ключей. Тогда вы сможете достичь конечной цели того, что вам нужно.

...