Джанго: Невозможно назначить "Эмму": "Booking.boat" должен быть экземпляром "Лодка" - PullRequest
0 голосов
/ 13 января 2019

Я пытался сделать систему бронирования лодок.

# models.py
class Boat(models.Model):
    name = models.CharField (max_length=10, unique=True, blank=False)
    type = models.CharField (max_length=10, blank=False)

class Booking(models.Model):
    date_from = models.DateField(auto_now=False, auto_now_add=False)
    date_to = models.DateField(auto_now=False, auto_now_add=False)
    rent = models.DecimalField(max_digits=7, decimal_places=2)  
    boat = models.ForeignKey(Boat, on_delete=models.CASCADE)
    person = models.ForeignKey(Person, on_delete=models.CASCADE)

Новая лодка зарегистрирована через эту форму:

class newBoatform(forms.Form):
    name = forms.CharField(label='Name of the boat: ', max_length=15)
    type = forms.CharField(label='Type of the boat: ', max_length=15)
  class Meta:
      model = Boat
      fields = ('name','type',)

Лодка бронируется через эту форму:

class bookform(forms.Form):
    boat =forms.CharField(label='Select boat',max_length=15)
    date_from=forms.DateField(label='Date from', initial=date.today)
    date_to=forms.DateField(label='Date to')
    rent = forms.DecimalField(label='Pay $ ')
  class Meta:
      model = Booking
      fields = ('date_from','date_to','rent','boat','person',)

Чтобы забронировать лодку через книжную форму , я вставляю название существующей лодки и другую информацию о поле. Тогда я получаю ошибку: Невозможно назначить "Эмму": "Booking.boat" должен быть экземпляром "Boat".

Функция просмотра книжной формы :

def bookBoat(request):
    if request.method == 'POST':
        form = bookform(request.POST)
        if form.is_valid():
            obj = Booking()
            obj.boat = form.cleaned_data['boat']
            obj.date_from = form.cleaned_data['date_from']
            obj.date_to = form.cleaned_data['date_to']
            obj.rent = form.cleaned_data['rent']
            obj.save()
            return HttpResponseRedirect('/thanks/')
    else:
        form = bookform()
    return render(request, 'booking.html', {'form': form})

Я не могу понять, что не так. Другие ответы на эту же ошибку возникают у меня над головой.

1 Ответ

0 голосов
/ 13 января 2019

Поскольку я не могу комментировать, вот мое предложение: obj.boat = Boat.objects.get(name=form.cleaned_data['boat'])

Это должно сделать работу.

...