Django数据保存到错误模型,为什么Model B和C的数据在Model A中保存?

0 投票
1 回答
32 浏览
提问于 2025-04-14 16:40

我有三个Django模型,分别是 CustomerDetailCarrierFormInfluencerModel。当我尝试通过不同页面的表单来保存数据到 CarrierFormInfluencerModel 时,数据却被保存到了 CustomerDetail 模型里。这是为什么呢?我哪里做错了?

这是模型的定义:

class CustomerDetail(models.Model):
    full_name             = models.CharField(max_length=255, null=False, blank=False)
    email                 = models.EmailField(max_length=255, null=False, blank=False)
    contact_number        = models.CharField(max_length=10, null=False, blank=False)
    message               = models.TextField(null=False, blank=False)
    visited_on            = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.email


class CarrierForm(models.Model):
    full_name             = models.CharField(max_length=255, null=False, blank=False)
    email                 = models.EmailField(max_length=255, null=False, blank=False)
    contact_number        = models.CharField(max_length=10, null=False, blank=False)
    upload_resume         = models.FileField(null=False, blank=False)
    message               = models.TextField(null=True, blank=True)
    visited_on            = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.email


class InfluencerModel(models.Model):
    full_name = models.CharField(max_length=255, null=False, blank=False)
    email = models.EmailField(max_length=255, null=False, blank=False)
    contact_number = models.CharField(max_length=10, null=False, blank=False)
    instagram_id   = models.CharField(max_length=50, null=False, blank=False)
    message = models.TextField(null=True, blank=True)
    visited_on = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.email

    def get_absolute_url(self):
        return reverse("influencers", kwargs={'slug': self.slug})

我这样渲染表单:

<form action="{% url 'home' %}" role="form" class="php-email-form" method="post"> {% csrf_token %}
      <div class="row">
      {{ form.as_table }}
        <div class="col-md-6 form-group">
          {{ form.full_name.errors }}
          {{form.full_name|as_crispy_field}}
        </div>

        <div class="col-md-6 form-group mt-3 mt-md-0">
             {{ form.email.errors }}
             {{form.email|as_crispy_field}}
<!--                  <input type="email" class="form-control" name="email" id="email" placeholder="Your Email" required>-->
        </div>


      <div class="form-group col-md-6">
        {{ form.contact_number.errors }}
        {{form.contact_number|as_crispy_field}}
<!--                <input type="text" class="form-control" name="subject" id="subject" placeholder="Subject" required>-->
      </div>

      <div class="form-group col-md-6">
        {{ form.instagram_id.errors }}
        {{form.instagram_id|as_crispy_field}}
<!--                <input type="text" class="form-control" name="subject" id="subject" placeholder="Subject" required>-->
      </div>

          </div>



      <div class="form-group mt-3" rows="7">
        {{ form.message.errors }}
        {{form.message|as_crispy_field}}
<!--                <textarea class="form-control" name="message" rows="7" placeholder="Message" required></textarea>-->
      </div>
<!--              <div class="my-3">-->
<!--                <div class="loading">Loading</div>-->
<!--                <div class="error-message"></div>-->
<!--                <div class="sent-message">Your message has been sent. Thank you!</div>-->
<!--              </div>-->
       <div class="text-center">
        <button type="submit" class="btn btn-outline-secondary" style="background-color:#FF512F; color: white">Send Message</button>
     </div>
<!--              <div class="text-center"><button type="submit">Send Message</button></div>-->
    </form>

这是网址配置:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', HomeView.as_view(), name='home'),
    path('influencers/', InfluencersPageView.as_view(), name='influencers'),
    path('carrier/', CarrierFormView.as_view(), name='carrier'),
    
    ]

1 个回答

1

因为你只提供了一个模板,我猜测你在提到的所有视图中都在使用同一个表单。你的表单操作指向了同一个网址 home,在 <form action="{% url 'home' %}" role="form" class="php-email-form" method="post"> {% csrf_token %} 这里。你需要根据你想让表单处理的视图来相应地更改这个网址。

撰写回答