Где разместить функции для установки значений внешних ключей в Django?

У меня есть две функции, которые я хотел бы добавить в свой проект Django, get_netloc, которые будут выполняться на Document.source_url и возвращать значение для ввода в функцию set_source. Функция set_sorce также принимает список кортежей из SOURCE_CHOICES в модели Source. Эта set_source будет действовать как @property setter в классе, что, как я догадываюсь, мне и нужно сделать. Я просто не уверен, где находятся эти функции и как их правильно реализовать. Я даже сомневаюсь, нужно ли их размещать в формах, хотя документы могут также приходить из S3 через лямбда-функцию.

Вот код, который у меня есть:

from django.db import models
from urllib.parse import urlparse

def get_netloc(url):
    try:
        return urlparse(url).netloc
    except:
        return 'other'

def set_source(netloc, list_tuples):
    for i in list_tuples:
        return netloc if netloc in i else 'other'

class Source(models.Model):
    OTHER = 'other'
    STACK = 'www.stackoverflow.com'
    TWITTER = 'www.twitter.com'
    REDDIT = 'www.reddit.com'
    SOURCE_CHOICES = [
        (OTHER, 'Other'),
        (STACK, 'StackOverflow'),
        (TWITTER, 'Twitter'),
        (REDDIT, 'Reddit'),
    ]
    name = models.CharField('Source Name', max_length=18, choices=SOURCE_CHOICES,
        default=OTHER)

    def __str__(self):
        return self.name

class Document(models.Model):
    name = models.CharField('Name', max_length=200)
    full_text = models.TextField('Text', blank=True, default='')
    source_url = models.URLField(blank=True)
    source = models.ForeignKey(Source, null=True, on_delete=models.PROTECT)
Вернуться на верх