Как сохранить поле django-модели, используя поле файла или файл содержимого, используя библиотеку Markdownx? - PullRequest
0 голосов
/ 14 января 2019

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

  1. Используя форму markdownx, я добавляю новую запись заметки за день, вводя всю необходимую информацию в каждое поле формы.
  2. Поскольку файл не существует, нажатие на кнопку отправки приведет к записи поля «содержимое» (которое имеет тип MarkdownxField ()) в файл.

или

  1. Используя форму markdownx (так же, как и выше), я добавляю еще одну запись заметки для дня, но на этот раз нужно только отредактировать поле 'content' в форме.
  2. Поскольку файл уже существует, я просто буду редактировать поле «содержимое» в форме, и после нажатия кнопки «Отправить» файл будет перезаписан вновь «отредактированным» полем «содержимое».

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

1) Как записать поле «содержимое» в файл и где это делается в иерархии моего проекта (например, мои views.py?).

2) Я предполагаю, что мне придется создать другое поле для моей модели? Должно ли это иметь тип ContentFile () или FileField ()? *

примечания / admin.py

from django.contrib import admin
from django.db import models
from markdownx.admin import MarkdownxModelAdmin
from .models import NotesModel

admin.site.register(NotesModel, MarkdownxModelAdmin)

примечания / models.py

from django.db import models
from markdownx.models import MarkdownxField
from markdownx.utils import markdownify
from django.utils import timezone

class NotesModel(models.Model):
    notes_type = models.CharField(max_length=100)
    notes_memo = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    created_at = models.DateField(default=timezone.now)
    # I'm guessing I'll need to add another field here?
    # Perhaps something like...
    # notes_file = models.FileField(upload_to='notes/')
    content = MarkdownxField()

    @property
    def formatted_markdown(self):
        return markdownify(self.content)
    def __unicode__(self):
        return self.notes_type

примечания / views.py

from django.shortcuts import render
from .models import NotesModel

def index(request):
    notes = NotesModel.objects.all
    return render(request, 'notes/notes.html', {'notes': notes,})

примечания / urls.py

from django.urls import path
from . import views
urlpatterns = [path('notes/', views.index, name='index'),]

примечания / шаблоны / примечание / base.html

<!DOCTYPE html>
<html>
<head>
    <title>Notes</title>
</head>
<body>
    {% block content %}{% endblock content %}
</body>
</html>

примечания / шаблоны / примечание / notes.html

{% extends "notes/base.html" %}
{% block content %}
{% csrf_token %}
    {% for note in notes %}
        <h1>Type: {{ note.notes_type }}</h1>
        <h1>Author: {{ note.author }}</h1>
        <h1>Created At: {{ note.created_at }}</h1>
        <p>Memo: {{ note.notes_memo }}</p>
        <p>{{ note.formatted_markdown|safe }}</p>
    {% endfor %}
{% endblock %}

Ожидаемыми результатами будет файл, связанный с моделью заметок для каждого дня. Поэтому, я думаю, вы бы сказали, что у меня есть ссылка на NotesModel в моей базе данных для каждого дня, с которой связаны вышеуказанные поля, включая один файл "notes_file". Я бы хотел, чтобы этот файл был сохранен в моем проекте в папке типа «MyNoteFiles / year / month» ...

--projectfolder
----MyNoteFiles
------2019
--------Jan
----------Jan_1_2019.md
----------Jan_2_2019.md
--------Feb
----------Feb_1_2019.md
----settings.py
----urls.py
----(and so on...)
----notes
------templates/notes
--------(and so on...)
------admin.py
------apps.py
------models.py
------urls.py
------(and so on...)
...