Какой лучший способ связать представления и передать данные между ними?

У меня есть основное приложение дневника, которое имеет два представления: Добавить и Изменить представление. Когда пользователь нажимает кнопку "Добавить" в представлении "Добавить", данные сохраняются в базе данных и отображается простое сообщение. Когда пользователь нажимает кнопку "Обновить" в окне "Правка", данные обновляются и добавляется штамп последнего обновления.

Пока что эти взгляды работают независимо. По умолчанию окно "Правка" загружает последнюю сохраненную запись и позволяет ее обновить.

Я хочу обновить его, чтобы при успешном добавлении новой записи в дневнике в представлении "Добавить" он переходил в представление "Правка", чтобы пользователи могли редактировать и обновлять, если они этого захотят. Как связать представления вместе и передать соответствующие данные в представление редактирования, чтобы узнать, какую запись (объект базы данных) выбрать для редактирования? Также я хотел бы иметь возможность использовать представление редактирования независимо для извлечения указанной записи в дневнике, например, на GET. Таким образом, представление редактирования не зависит от того, кто его называл, он просто знает, какую запись в дневнике загрузить.

Код для добавления и редактирования представления, как они есть, отображаются ниже:

def addEntry(request):
   entryForm = None

   if request.method == "POST":
       entryForm = EntryForm(request.POST)

       if entryForm.is_valid():
           entryForm.save(commit = True)
           request.method = "GET"
           return entrySubmitted("Entry has been submitted")
       else:
           logger.info(entryForm.errors)
    else:    
        # Set up view with new entry form
        entryForm = EntryForm()

    template = getEntryViewTemplate(entryForm)

    return render(request, "DiaryEntry.html", template)



def editEntry(request):
   # Get the latest entry from the database
   entry = Entry.objects.last();

   if request.method == 'GET':
       entryForm = EntryForm(instance = entry)
   else:
       entryForm = EntryForm(request.POST, instance = entry)
       if entryForm.is_valid():
           entryForm.setLastUpdated(datetime.now())
           entryForm.save(commit = True)

   templateData = getEntryViewTemplate(entryForm)
   return render(request, "EditEntry.html", templateData)

Заранее спасибо,

Фрэнсис

1 ответ

Решение

Посмотрите документацию Django о Class Base View.

https://docs.djangoproject.com/en/1.10/topics/class-based-views/intro/

Вы можете создать класс с другим методом. Get, Post(создать объект), Put(Обновить объект)

И у вас есть много полезных методов и атрибутов. Например, вы можете связать свое представление класса с конкретной моделью (Entry). https://docs.djangoproject.com/fr/1.10/ref/class-based-views/mixins-single-object/

Как связать представления вместе и передать соответствующие данные в представление редактирования, чтобы узнать, какую запись (объект базы данных) выбрать для редактирования? Вам необходимо передать ID объекта для редактирования. Два решения. В вашем посте данные. Или аргументом в вашем URL. http://your_web_site.com/entry/id_entry/ И вы начинаете свою форму с входными данными

В вашем URL django вы можете указать ссылку на ваш базовый класс.

    url(r'^entry/$', views.EntryView.as_view(), name='create_entry'),
    url(r'^entry/(?P<pk>[-\w/]+)$', views.EntryView.as_view(), name='update_entry'),

Я надеюсь, что это поможет вам

Другие вопросы по тегам