Как отличить автоматически созданные сквозные модели ManyToMany от Django от заданных вручную? - PullRequest
2 голосов
/ 10 февраля 2010

скажем, у нас есть модели:

from django.db import models

class AutomaticModel(models.Model):
    others = models.ManyToManyField('OtherModel')

class ManualModel(models.Model):
    others = models.ManyToManyField('OtherModel', through='ThroughModel')

class OtherModel(models.Model):
    pass

class ThroughModel(models.Model):
    pblm = models.ForeignKey('ManualModel')
    other = models.ForeignKey('OtherModel')

После этого мы можем получить доступ к сквозным моделям через

AutomaticModel._meta.get_field('others').rel.through и

ManualModel._meta.get_field('others').rel.through

Проблема:

Если задано либо AutomaticModel, либо ManualModel (или их поля 'others'), как определить, была ли сквозная модель создана автоматически или вручную.

Конечно, за исключением проверки имен, но это не соответствует общему случаю - также проверка содержимого файла models.py также кажется немного подверженной ошибкам. И, кажется, ничего нет в реальных полях __dict__ или где-либо еще.

Есть какие-нибудь подсказки?

1 Ответ

2 голосов
/ 11 февраля 2010

Что ж, южные разработчики, кажется, знают это: модель генерируется автоматически, если

# Django 1.0/1.1
(not field.rel.through)
or
# Django 1.2+
getattr(getattr(field.rel.through, "_meta", None), "auto_created", False)

Woohoo!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...