Подтвердить что ты не робот

Модель Django задает внешний ключ для поля другой модели

Есть ли способ установить внешний ключ в django в поле другой модели?

Например, представьте, что у меня есть объект ValidationRule. И я хочу, чтобы правило определяло, какое поле в другой модели должно быть проверено (а также какая-либо другая информация, например, может ли она быть нулевой, тип данных, диапазон и т.д.).

Есть ли способ сохранить это сопоставление на уровне поля в django?

4b9b3361

Ответ 1

Да и нет. Связь FK описывается на уровне класса и отражает ассоциацию FK в базе данных, поэтому вы не можете добавлять дополнительную информацию непосредственно в параметр FK.

Вместо этого я бы рекомендовал иметь строку, содержащую имя поля в другой таблице:

class ValidationRule(models.Model):
    other = models.ForeignKey(OtherModel)
    other_field = models.CharField(max_length=256)

Таким образом, вы можете получить поле с помощью:

v = ValidationRule.objects.get(id=1)
field = getattr(v, v.other_field)

Обратите внимание: если вы используете поля "Множество ко многим" (а не "один ко многим" ), существует встроенная поддержка для создания пользовательских промежуточных таблиц для хранения метаданных с помощью through.

Ответ 2

Я не пробовал это, но кажется, что с Django 1.0 вы можете сделать что-то вроде:

class Foo(models.Model):
    foo = models.ForeignKey(Bar, to_field='bar')

Документация для этого здесь.