Как подклассифицировать поле внешнего ключа модели Django

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

Goal - это класс модели 'BaseFKField', который имеет:

  • on_delete = models.RESTRICT по умолчанию
  • blank = False по умолчанию
  • связанные имена не имеют типичного суффикса '_set' для запросов, related_name это вызывает трудности

Я пробовал различные формулировки этого:

class BaseFKField(models.ForeignKey):
    def __init__(self, to, on_delete = None, ok_blank = None, *args, **kwargs):
        on_delete = models.RESTRICT
        kwargs['blank'] = ok_blank
        super().__init__(to, on_delete, blank = ok_blank, *args, **kwargs)
class BaseFKField(models.ForeignKey):
    def __init__(self, to, on_delete=None, *args, **kwargs):
        super().__init__(to, on_delete, blank = False, *args, **kwargs)

Также пробовал установить kwargs["rel"] в моем ___init___, импортируя ManyToOneRel и используя его, как они делают с rel_class в классе поля Foreign Key, но безуспешно.

Ошибки, которые я получаю:

  • ошибка обратного аксессора для related_name
  • переменная задана дважды
  • пропущен необходимый аргумент

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

Если кто-нибудь может привести пример пользовательского класса, который устанавливает необходимый аргумент, это было бы замечательно.

Иначе я просто вернусь к тому, чтобы делать это с помощью функций.

Вернуться на верх