Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django ModelForm:定义未传递到模板中的值_Python_Django_Modelform - Fatal编程技术网

Python Django ModelForm:定义未传递到模板中的值

Python Django ModelForm:定义未传递到模板中的值,python,django,modelform,Python,Django,Modelform,我有一个模型表单,我只想将一些字段传递到模板中。我想在发送POST请求后保存一个特定字段以进行定义。以下是模型表单: class CreateListingForm(ModelForm): class Meta: model = models.ListingModel fields = ['name', 'image', 'description', 'price', 'category'] widgets = {

我有一个模型表单,我只想将一些字段传递到模板中。我想在发送POST请求后保存一个特定字段以进行定义。以下是模型表单:

class CreateListingForm(ModelForm):
    class Meta:
        model = models.ListingModel
        fields = ['name', 'image', 'description', 'price', 'category']
        widgets = {
            'description': Textarea()
        }
以下是模型:

class ListingModel(models.Model):
    name = models.CharField(max_length=30)
    image = models.ImageField(upload_to='images')
    description = models.CharField(max_length=1000)
    price = models.PositiveIntegerField()
    category = models.CharField(max_length=15)
    objects = models.Manager()
    owner = models.CharField(max_length=100) 

在下一个代码块中,我试图根据当前登录的用户(
request.user.username
)定义
owner
字段:

现在,当我说
print(form.owner)
时,结果是正确的。但是,当我保存模型表单时,所有者字段保留为空。我是否没有正确定义
所有者
字段的值?

您不应该将
模型表单
与其包装的实例混淆。它为
form.owner
打印某些内容的事实并不奇怪,您首先设置了一个名为
.owner
的属性,这是一个以前不存在的属性。您应该设置表单的
.instance
.owner

@login_required(redirect_field_name=login_view)
def create_listing(request):
    if request.method == 'POST':
        form = forms.CreateListingForm(request.POST, request.FILES)
        if form.is_valid():
            form.instance.owner = request.user.username
            form.save()
            return redirect('name-of-some-view')
    else:
        form = forms.CreateListingForm()
    return render(request, 'auctions/createlisting.html', {
        'CreateListingForm': form
    })
@login\u必需(重定向\u字段\u名称=登录\u视图)
def创建_列表(请求):
如果request.method==“POST”:
form=forms.CreateListingForm(request.POST、request.FILES)
如果form.is_有效():
form.instance.owner=request.user.username
form.save()
返回重定向('name-of-some-view')
其他:
form=forms.CreateListingForm()
返回呈现(请求'auctions/createlisting.html'{
“CreateListingForm”:表单
})
其中,
'name-of-some-view'
应替换为某个视图的名称,如果表单有效,则重定向到该视图

您应该考虑将<代码> CharField <代码> > <代码>所有者>代码>。假设用户稍后更改了他们的

用户名
,那么您的
列表模型
不再是指真正的用户。

您不应该将
模型表单
与它正在包装的实例混淆。它为
form.owner
打印某些内容的事实并不奇怪,您首先设置了一个名为
.owner
的属性,这是一个以前不存在的属性。您应该设置表单的
.instance
.owner

@login_required(redirect_field_name=login_view)
def create_listing(request):
    if request.method == 'POST':
        form = forms.CreateListingForm(request.POST, request.FILES)
        if form.is_valid():
            form.instance.owner = request.user.username
            form.save()
            return redirect('name-of-some-view')
    else:
        form = forms.CreateListingForm()
    return render(request, 'auctions/createlisting.html', {
        'CreateListingForm': form
    })
@login\u必需(重定向\u字段\u名称=登录\u视图)
def创建_列表(请求):
如果request.method==“POST”:
form=forms.CreateListingForm(request.POST、request.FILES)
如果form.is_有效():
form.instance.owner=request.user.username
form.save()
返回重定向('name-of-some-view')
其他:
form=forms.CreateListingForm()
返回呈现(请求'auctions/createlisting.html'{
“CreateListingForm”:表单
})
其中,
'name-of-some-view'
应替换为某个视图的名称,如果表单有效,则重定向到该视图


您应该考虑将<代码> CharField <代码> > <代码>所有者>代码>。假设用户稍后更改其

用户名
,则您的
列表模型
不再引用真实用户。

form.save(commit=True)将仅保存您在meta类中已定义的字段。如果您想在POST调用后保存额外字段,则应使用不同的方法。一种可能的方法是对ListingModel使用post_save信号。form.save(commit=True)将只保存您在meta类中已定义的字段。如果您希望在post调用后保存额外字段,则应使用不同的方法。一种可能的方法是为ListingModel使用post_保存信号。您的解决方案有效。我刚刚实现了它。非常感谢。你的解决方案奏效了。我刚刚实现了它。非常感谢。