当我将url参数传递给modelform时,传递的是None而不是url参数



我正在尝试建立一个发布网页。

这就是它的工作原理:
您单击一个按钮,就会出现过帐表单,您填写表单,单击提交按钮,流程就完成了。当表单提交时,url参数将作为views.py中模型表单中隐藏输入的值传递。

但是,当我在manage.py shell中浏览模型时,会保存None而不是url参数。

以下是代码:
型号.py

from django.db import models
from django.db.models import CharField, TextField, DateField
class Post(models.Model):
username = CharField(max_length=30, blank=True, null=True)
content = TextField()
dt_created = DateField(auto_now_add=True)
dt_modified = DateField(auto_now=True)
def __str__(self):
return self.username

表单.py

from django import forms
from django.forms import Textarea, HiddenInput
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['content', 'username']
widgets = {
'content': Textarea(attrs={
'class': 'write_input',
'placeholder': 'write your story here...'
}),
'username': HiddenInput(attrs={
'value': ' '
})
}
labels = {
'content': ''
}

urls.py

from django.urls import path, include
from . import views
urlpatterns = [
path('<str:username>/main/', views.account_main, name='account_main')
]

视图.py

from django.shortcuts import render, redirect
from .forms import PostForm
from .models import Post
def account_main(request, username):
context = dict()
if request.method == 'POST':
form = PostForm(request.POST, initial={'username': username})
if form.is_valid():
form.save()
return redirect('account_main', username=username)
form = PostForm()
posts = Post.objects.all().order_by('dt_created')
context['username'] = username
context['form'] = form
context['posts'] = posts
return render(request, 'Account/account_main.html', context=context)

我尝试过的:
initial={'username': username}作为kwargs传递给PostForm()
访问cleaned_data并将url参数作为值传递,如:form.cleaned_data['username'] = username

到目前为止,我在谷歌或堆栈溢出中找不到任何解决方案。非常感谢你的回答!!

我找到了解决方案。

form.is_valid()返回True之后,我用form = form.save(commit=False)保存表单
然后,我传递url参数作为form.username的值。最后,我用form.save()保存了表格
当我浏览模型时,url参数和username值一起保存。

这是我修改后的代码:

def account_main(request, username):
context = dict()
if request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
form = form.save(commit=False)
form.username = username
form.save()
return redirect('account_main', username=username)

如果你的主要动机是传递一个隐藏字段和一个表单,你可以直接发送,而不需要将其包含在URL中。你可以通过获取文件

-->要求POST.get(#fieldName(

最新更新