Использование модели в качестве источника для PK для другой модели?
Итак, если у меня есть простая модель, которую я хочу использовать в качестве источника PK, например, так:
class PostCreation(models.Model):
pk = models.AutoField(primary_key=True)
post = models.OneToOneField(Post, on_delete=models.CASCADE)
Я хочу создать PK записи блога до того, как она будет создана. Я рассуждаю так: я хочу, чтобы изображения/файлы, которые я загружаю, были в формате
/media/blogPK/files
Итак, мой пост будет иметь поле id/PK, установленное в классе PostCreation выше. Псевдокод приведен ниже:
id = PostCreation()
FileField(upload_to='{}{}{}'.format(id, '/', files))
Но как я могу сначала создать PK, а затем передать его в модель Post и затем установить Post is/pk в PostCreation?
Я собираюсь использовать ModelForm для вывода полей для содержания поста, описания/даты и т.д. Поэтому, когда я посещаю это представление, я хочу, чтобы pk/id уже был создан, даже если пользователь отправит содержимое модели поста. содержимое модели Post.
Как я могу это сделать? Возможно ли это?
Thx
Все, что вам нужно сделать, это заполнить форму начальным значением, основанным на последнем сохраненном объекте id
. Затем :
views.py : где вы инстанцируете форму
def create_post(request):
# Some logics here ...
# Retrieve the last object id from the db
latest_index = Post.objects.last().id
# Format the folder name based on the index
upload_to = f"{latest_index + 1}/files"
# Set the initial value of the folder path
form = PersonForm(initial={'file_field_name': upload_to})
# Some logics here ...
NB : Обратите внимание, что file_field_name
- это имя поля FileField в модели