因此,我正在try 使用Django建立一个网站,用户可以访问property-detail个页面,然后联系wine 店的agent.用户需要填写一张表格,然后通过邮箱发送到agent.我的邮箱工作得很好,但因为property-detail view是基于类的视图,而contact_agent view是基于函数的视图,所以它们是不同的视图.因此,我似乎不能动态地获取property's agent来获取agent's邮箱来给他发送邮箱.

我的Models.py:

class Agent(models.Model):
    name = models.CharField(max_length=100)
    password = models.CharField(max_length=100)
    image = models.ImageField(upload_to = 'Images/')
    bio = models.TextField()
    instagram = models.URLField(max_length=100)
    twitter = models.URLField(max_length=100)
    facebook = models.URLField(max_length=100)
    linkedin = models.URLField(max_length=100)
    is_featured = models.BooleanField(default = False)
    slug = models.SlugField(default='')


class Property(models.Model):
    price = models.IntegerField()
    price_per_sqft = models.IntegerField(null=True)
    address = models.CharField(max_length = 10000)
    state = models.CharField(max_length = 1000)
    country = models.CharField(max_length = 1000)
    description =  models.TextField()
    image1 = models.ImageField(upload_to = 'Images/')
    image2 = models.ImageField(upload_to = 'Images/')
    image3 = models.ImageField(upload_to = 'Images/')
    agent = models.ForeignKey(Agent, on_delete=models.CASCADE)
    agent_description = models.TextField()
    is_featured = models.BooleanField(default = False)
    bedrooms = models.IntegerField()
    bathrooms = models.IntegerField()
    date_posted = models.DateTimeField(default=timezone.now)
    slug = models.SlugField(default='')

我的views.py:

@login_required
def contact_agent(request):
    property = get_object_or_404(Property)
    agent = property.agent
    if request.method == "POST":
        name = request.POST['name']
        email = request.POST['email']
        current_address = request.POST['current_address']
        phone = request.POST['phone']
        message = request.POST['message']

        application = f"Name: {name}\nPhone: {phone}\nEmail: {email}\nCurrent Address: {current_address}\nMessage: {message}"
    
        email_message = EmailMessage(
            f'Message to agent {agent} from {name}',
            application,
            settings.EMAIL_HOST_USER,
            ['{agent.email}'],  
        )
    
        email_message.send()

        return render(request, 'users/contact_agent.html', {
            'name': name,
            'email': email,
            'phone': phone,
            'current_address': current_address,
        })
    
    else:
        return render(request, 'blog/index.html', {})

推荐答案

问题是,您的数据库中可能有超过Property个.台词是:

property = get_object_or_404(Property)

查询数据库以返回Property,如果只有一项,这是没有问题的.它会分配给那个人.

但问题当然是当有multipleProperty的时候.在这种情况下,它因此无法区分.

很可能,只要有一处房产,这种做法就可以奏效.为了消除歧义,通常在路径中包括主键,从而使用该主键进行查询:

@login_required
def contact_agent(request, pk):
    property = get_object_or_404(Property, pk=pk)
    # …

在这条道路上:

path('contact-agent/<int:pk>/', contact_agent)

因此,现在的视图类似于contact-agent/2/,其中101是您要联系代理的Property的主键.


Note:如果POST请求成功,您应该设置为redirect [Django-doc] 落实Post/Redirect/Get pattern [wiki]条. 这样可以避免在用户刷新 浏览器.

Django相关问答推荐

如何显示日期?

RDBMS多对多关系Django

使用自定义模型注册后,Django无法登录

Django 按月分组并按月显示在模板中

Django:创建一个动态侧边栏模板并在其他模板中使用它

在 Django Admin change_list 视图中更改 list_editable 字段时保存 Django 模型

如何让 Django 在模板更改时重新启动运行服务器?

Django:无法从另一个应用程序导入模型

模板过滤器修剪任何前导leading或尾随trailing空格

多租户 Django 应用程序:根据请求更改数据库连接?

AttributeError:'Manager'对象在Django中没有属性'get_by_natural_key'错误?

在 Django CharFields 中自动截断 max_length 字段

如何在 django 中生成 url

(fields.E300) 字段定义与模型的关系,该模型要么未安装,要么是抽象的

创建新内容类型时出错.请确保在try 单独迁移应用程序之前迁移内容类型

Python/Django:从 values_list() 创建一个更简单的列表

如何在 Django Rest Framework SimpleRouter 上使斜杠可选

使用 Gunicorn 运行 Django - 最佳实践

django.db.utils.OperationalError 无法连接到服务器

确保只有一个工作人员在运行多个工作人员的 pyramid 网络应用程序中启动 apscheduler 事件