Где разместить функции для установки значений внешних ключей в 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)