I am writing a restaurant app in Django and I have a specific view that catches an Ajax request. From this request I get the name of a dish, which I try to save in a new object Order. I keep getting this error " ValueError: Cannot assign "'pasta'": "Order.dish_name" must be a "Dish" instance." and I have no idea why. I have been trying to fix it for 2 days, so i would like to know what I am doing wrong
type here
models.py`
from django.db import models
class Table( models.Model ) :
number = models.IntegerField( primary_key= True)
def __str__( self ) :
return str(self.number)
class Dish(models.Model ) :
name = models.CharField( primary_key= True, max_length= 50 )
price = models.FloatField()
type = models.CharField( max_length= 50 )
gluten = models.BooleanField( null= False)
lactose = models.BooleanField( null= False)
def __str__( self ) :
return self.name
class Meal(models.Model ) :
start = models.TimeField()
end = models.TimeField(blank= True, null= True, default= None)
table = models.ForeignKey(Table, on_delete=models.CASCADE)
def __str__( self ) :
return str(self.table.number)
class Order(models.Model):
request_time = models.TimeField()
kitchen_start_time = models.TimeField(blank= True, null= True, default= None)
delivery_time = models.TimeField(blank= True, null= True, default= None)
dish_name = models.ForeignKey(Dish, null= True, blank= True, default= None, on_delete=models.CASCADE)
table = models.ForeignKey(Table, null= True, default= None, on_delete=models.CASCADE)
def __str__(self):
return str(self.table.number)````
The main.js
$(".special").click(function (e){
var x= e.target.id
$.ajax({
type: 'POST',
data: {
'dishes' : x,
},
success: function(response){
console.log(response);
},
error: function(error){
console.log(error);
},
});
e.preventDefault();
}
)
part of the html
{% for d in dishes %}
<div class="cell">
<a href=# class="special" id='{{d.name}}' > {{d.name}}</a></li>
</div>
{% endfor %}
the view
def open(request, number):
tav = Table.objects.get(number = number)
p = Meal(table=tav, start=datetime.now())
p.save()
dishes = Dish.objects.all().order_by('type')
if request.method == 'POST':
clicked_dish =request.POST.get('dishes')
new_order= Order(request_time=datetime.now(), dish_name= clicked_dish, table=tav)
new_order.save()
return render(request, 'nuovo.html', {'dishes': dishes, 'table': tav})
and the url
urlpatterns = [
re_path(r'^admin/', admin.site.urls),
re_path(r'home/', views.home),
re_path(r'^new/',views.index, name='index'),
re_path(r'^open/(\d+)/$',views.open, name='open'),
]