Есть два модуля.Первая книга, а другая категория.Есть форма и HTML-файл, которые предоставляют поля для ввода.
Я хочу изменить стиль полей в forms.py.Я знаю, как это сделать для текстовых полей, но когда я пытаюсь использовать раскрывающийся ввод (чужой ключ в другую таблицу), я получаю сообщение об ошибке при отправке формы.
в modules.py
class Category(models.Model):
categoryname = models.CharField(max_length=100)
def __str__(self):
return self.categoryname
class Book(models.Model):
title = models.CharField(max_length=100, default="-")
category = models.ForeignKey(Category, on_delete=models.CASCADE,default="-")
text = models.TextField(default="-")
def __str__(self):
return self.title
в forms.py
class CreateBook(forms.ModelForm):
title = forms.CharField(widget=forms.TextInput(attrs={'class': 'text-form'}))
def choice_list():
choices = ()
for choice in models.Category.objects.all():
choices = choices + ((choice.id, choice),)
return choices
category = forms.ChoiceField(choices=choice_list(),
widget=forms.Select(attrs={'class': 'select-form'}))
class Meta:
model = models.Book
fields = ['title', 'category', 'text']
в index.html
<html lang="en">
<head>
<meta charset="UTF-8">
<title>New Book</title>
</head>
<body>
<form class="site-form" action="{% url 'Book:create' %}" method="post">
{% csrf_token %}
{{ form.title}}
{{ form.category}}
{{ form.text}}
<input type="submit" value="Create">
</form>
</body>
</html>
Это ошибка, которую я получаю при отправке формы:
Cannot assign "'1'": "Book.category" must be a "Category" instance.
Подводя итог, как мне написать этот код ниже, чтобы получить иностранный ключ в ChoiceField?
What here??? choices=(???how address model here???),
Код:
def choice_list():
choices = ()
for choice in models.Category.objects.all():
choices = choices + ((choice.id, choice),)
return choices
category = forms.ChoiceField(choices=choice_list(),
widget=forms.Select(attrs={'class': 'select-form'}))