Czyszczenie formularza po wysłaniu danych AJAX

0

Cześć,
Mam sobie w Django formularz i skrypt AJAX, który dodaje mi do tabeli pewne wartości. Problem pojawia się wtedy, gdy chcę wyczyścić fomularz po wysłaniu danych - nie czyści pól w formularzu i nie rzuca błędami w konsoli. Mógłby ktoś rzucić okiem i wskazać gdzie robię błąd? Dzięki.

forms.py

class AddItemForm(forms.ModelForm):
    class Meta:
        model = Item
        fields = '__all__'
        widgets = {
            'name': forms.TextInput(attrs={'class':'form-control', 'style': 'width:150px'}),
            'category': forms.Select(attrs={'class':'form-control', 'style': 'width:150px'}),
            'calories': forms.TextInput(attrs={'class':'form-control', 'style': 'width:100px'}),
            'proteins': forms.TextInput(attrs={'class':'form-control', 'style': 'width:100px'}),
            'fats': forms.TextInput(attrs={'class':'form-control', 'style': 'width:100px'}),
            'carbohydrates': forms.TextInput(attrs={'class':'form-control', 'style': 'width:100px'}),
        }

skrypt AJAX

function save_data() {
        var token = "{{csrf_token}}";
        var name = $("#id_name").val();
        var category = $("#id_category").val();
        var calories = $("#id_calories").val();
        var proteins = $("#id_proteins").val();
        var fats = $("#id_fats").val();
        var carbohydrates = $("#id_carbohydrates").val();

        $.ajax({
          type: "POST",
          headers: { "X-CSRFToken": token },
          url: "{% url 'ajaxsaved' %}",
          data: { name: name, category: category, calories: calories,
              carbohydrates: carbohydrates, fats: fats, proteins: proteins },

          success: function(data){
              $("#id_name")[0].reset();
          },
          error: function (data) {
              $("#id_name")[0].reset();
          },
        });
      }

Dodatkowo rzuca mi w konsoli błędem (po wybraniu kategorii z formularza)

ValueError: Cannot assign "'1'": "Item.category" must be a "Category" instance.

2

Napisz małą funkcję, która będzie czyściła formularz, gdy ten przejdzie (część success)
np

const form_cleaner = ()=>{
  for(let id of "#id_calories", "#id_costam"){
    $(id).val("")
  }
}
0

On mi w ogóle nie wpada do success, bo wtedy by uruchomiła się linijka kodu, która to robi. Nie wiem dlaczego, ale dodaje mi wartości do tabeli, ale nie wpada do linijki success.

0

Nie wiem czy powieniem pisać 2 posty z rzędu..

class Category(models.Model):
    meals = (
        ('Breakfast', 'BreakFast'),
        ('2nd Breakfast', '2nd BreakFast'),
        ('Lunch', 'Lunch'),
        ('Snack', 'Snack'),
        ('Supper', 'Supper'),
    )
    name = models.CharField(choices=meals, max_length=13)

    def __str__(self):
        return self.name


class Item(models.Model):
    name = models.CharField(max_length=50)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    calories = models.IntegerField(default=0)
    proteins = models.DecimalField(max_digits=5, decimal_places=1, default=0)
    fats = models.DecimalField(max_digits=5, decimal_places=1, default=0)
    carbohydrates = models.DecimalField(max_digits=5, decimal_places=1, default=0)

    def __str__(self):
        return self.name

1 użytkowników online, w tym zalogowanych: 0, gości: 1