Проблема с 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' в соответствии с вашим представлением.
Попробуйте его с вышеуказанными изменениями, это может помочь вам с вашими требованиями.