Данные сохраняются как [объект Object] в базе данных django

form.html

<form data-bind="submit: save" enctype="multipart/form-data" >  
  {% csrf_token %}
   
    <table border="1">
<tr>
    <td>Title:
    <input type="text" name="title" id="title" data-bind="value: $data.title"></td>
    <br>
</tr>
<tr>
    <td>Description:
    <textarea name="description" id="description" data-bind="value: $data.description">Description</textarea></td>
    <br>
</tr>
<tr>
    <td>Image:
    <input type="file" name="image" id="image" ></td>
    <br>
</tr>

<tr>
    <td><button type="button" id="submit" data-bind="click: save">Submit</button></td>
</tr>

</table>
</form>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.5.0/knockout-min.js"></script>
<script>
  




    function getCookie(name) {
      let cookieValue = null;
      if (document.cookie && document.cookie !== '') {
          const cookies = document.cookie.split(';');
          for (let i = 0; i < cookies.length; i++) {
              const cookie = cookies[i].trim();
              // Does this cookie string begin with the name we want?
              if (cookie.substring(0, name.length + 1) === (name + '=')) {
                  cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                  break;
              }
          }
      }
      return cookieValue;
  }
  const csrftoken = getCookie('csrftoken'); 
</script>
<script>
  var ViewModel = function () {
      var self = this;
      self.save = function () {
          var formdata = new FormData();
          formdata.append('image', $('#image').get(0).files[0]);
          formdata.append('title', ko.observable(""));
          formdata.append('description', ko.observable(""));
          console.log(formdata)
          $.ajax({
              type: 'POST',
              url: "{% url 'productsadd' %}",
              data: formdata,
              headers: {'X-CSRFToken': csrftoken},
              processData: false,                
              contentType: false,
              success: function (){
                  alert('The post has been created!')
                  window.location = '{% url "productslist" %}'; 
              },
              error: function () {
                  alert("fail");
              }
          });
};
  };
  ko.applyBindings(new ViewModel())
  </script>

views.py

class ProductsCreate(CreateView):
   model = Products
   template_name = "productscreate.html"
   serializer = Productserialize
   success_url=reverse_lazy('productslist')



def productsAdd(request):
    if request.method == "POST":
        product=Products()
        product.title = request.POST['title']
        product.description = request.POST['description']
        product.image = request.FILES.get('image')
        product.save()
        print(request.POST)
        print(request.FILES)
        return render(request,'productslist.html')
    else:
        return render(request,'productscreate.html')

  
class ProductsDetailView(DetailView):
     template_name = "productsdetail.html"
     queryset = Products.objects.all()
     context_object_name = 'products'
     model = Products
     serializer_class = Productserialize

Когда я создаю продукт в форме, изображение добавляется только в базу данных, но название и описание добавляется как [объект Object]. В коде представления я сделал заголовок и описание, но сохранил как объект. Я привел html код и код представления. Я не знаю, где проблема в этом коде. Пожалуйста, помогите мне решить эту проблему Заранее спасибо

Измените это

formdata.append('title', ko.observable(""));
formdata.append('description', ko.observable(""));

К этому

formdata.append('title', $('#title').val);
formdata.append('description', $('#description').val);
Вернуться на верх