You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中Contact()遇意外关键字参数'listing'报错求助

解决Django TypeError: Contact() got an unexpected keyword argument 'listing'

问题分析

你遇到的错误有两个核心原因:

  1. 未实例化Contact对象就调用save():代码里直接执行contact.save(),但根本没有创建Contact类的实例,这会导致后续逻辑完全错误。
  2. 模型字段不匹配:报错提示listing不是Contact的合法参数,说明你的Contact模型中没有定义名为listing的字段,但你试图在创建实例时传递这个参数(即使代码逻辑未写全)。

修复步骤

1. 检查Contact模型定义

打开你的models.py,确认Contact模型的字段。比如正确的模型结构可能是这样(假设关联房源的是listing_id字段):

from django.db import models

class Contact(models.Model):
    listing_id = models.IntegerField()
    name = models.CharField(max_length=200)
    email = models.EmailField()
    phone = models.CharField(max_length=20)
    message = models.TextField(blank=True)
    user_id = models.IntegerField(blank=True)
    realtor_email = models.EmailField()
    # 其他自定义字段...

如果模型里确实没有listing字段,就不要在创建实例时传递这个参数。

2. 修正视图代码

需要先创建Contact实例,再调用save(),同时移除模型中不存在的参数,还要修正函数名和跳转逻辑:

from django.shortcuts import render, redirect
from .models import Contact
from django.contrib import messages

def contact(request):  # 避免函数名和模型类名重名,改为小写的contact
    if request.method == 'POST':
        listing_id = request.POST['listing_id']
        # 移除无用的listing变量,因为模型没有对应字段
        name = request.POST['name']
        email = request.POST['email']
        phone = request.POST['phone']
        message = request.POST['message']
        user_id = request.POST['user_id']
        realtor_email = request.POST['realtor_email']

        # 实例化Contact对象,只传递模型中存在的字段
        contact = Contact(
            listing_id=listing_id,
            name=name,
            email=email,
            phone=phone,
            message=message,
            user_id=user_id,
            realtor_email=realtor_email
        )
        contact.save()  # 现在可以正常保存数据到数据库

        messages.success(request, 'Your request has been submitted, a realtor will get back to you soon')
        # 修正跳转逻辑,假设urls.py中定义了名为'listing'的URL,接受listing_id参数
        return redirect('listing', listing_id)
    # 处理GET请求的逻辑(根据需求添加)
    return render(request, 'your_contact_template.html')

额外注意点

  • 函数名冲突:原视图函数名Contact和模型类名重名,会导致代码混淆,建议统一改为小写的contact。
  • URL跳转错误:原代码redirect('listings'+listing_id)写法不符合Django规范,正确写法是redirect('listing', listing_id),需要确保urls.py中已定义对应的带参数URL。

内容的提问来源于stack exchange,提问作者thezeeshann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 23:40:37