Проблема с Django Form-Model;

У меня проблемы с работой с моделями и формами в Django. Небольшое разъяснение и помощь будут высоко оценены!

Я действительно запутался, потому что я не вижу форму на моей html url странице. Я вижу все остальное, но не форму. Я предполагаю, что я что-то упускаю.

Это мой forms.py

from django import forms
from .models import TwitterContainer

class TwitterUpdateForm(forms.ModelForm):
    class Meta:
        model = TwitterContainer
        fields = ["Twitter_API_key", "Twitter_API_key_secret", "Twitter_API_token", "Twitter_API_token_secret"]
    

Это мой models.py

from django.db import models
from django.contrib.auth.models import User

class TwitterContainer(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    Twitter_API_key = models.fields.CharField(max_length=100)
    Twitter_API_key_secret = models.fields.CharField(max_length=100)
    Twitter_API_token = models.fields.CharField(max_length=100)
    Twitter_API_token_secret = models.fields.CharField(max_length=100)
    
    def __str__(self):
        return f'{self.user.username} Twitter Container'

Это мой views.py

from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from .forms import TwitterUpdateForm


@login_required
def twitter(request):
    tw = TwitterUpdateForm(request.POST, instance=request.user)
    
    if tw.is_valid():
        tw.save()
        messages.success(request, f'NICE!')
        return redirect ('home')
    else:
        tw = TwitterUpdateForm(request.POST, instance=request.user)
        
    context = {'tw': tw}
    
    return render(request, 'twitter_container/twitter_container.html', context=context)

И последнее, но не менее важное, это мой html-файл.

{% extends 'home/base.html' %}
{% load crispy_forms_tags %}
{% block content %}
    <div class="content-section">
        </div>
        <form method="POST" enctype="multipart/form-data">
            {% csrf_token %}
            <fieldset="form-group">
                <legend class="border-bottom mb-4">Profile Information</legend>
                {{ u_form|crispy }}
                {{ p_form|crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-info" type="submit">Update</button>
            </div>
        </form>
    </div>
{% endblock content %}

О, и мой urls.py тоже.

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('home.urls')),
    path('register/', user_views.register, name='register'),
    path('login/', auth_views.LoginView.as_view(template_name='users/login.html'), name='login'),
    path('logout/', auth_views.LogoutView.as_view(template_name='users/logout.html'), name='logout'),
    path('profile/', user_views.profile, name='profile'),
    path('twitter/', twitter_views.twitter, name='twitter'),
]

Проблема, с которой я столкнулся, заключается в том, что я не могу отобразить поля формы из модели в html. Я хочу иметь возможность импортировать информацию в поля и обновлять ее в базе данных.

Пожалуйста, не судите меня строго, я совсем новичок.

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

Прежде всего, вам нужно добавить атрибут action в тег формы, чтобы вызвать функцию просмотра, когда форма будет отправлена.

Это должно выглядеть следующим образом:

<form method="POST" action ="{% url 'twitter'  %}" enctype="multipart/form-data">

Второе, что я нашел неправильным в вашем html-коде, это то, почему вы используете u_form и p_form в качестве контекстной переменной? Это должно быть 'tw' в соответствии с вашим представлением.

Попробуйте его с вышеуказанными изменениями, это может помочь вам с вашими требованиями.

Вернуться на верх