Как отобразить внешний ключ в теге select в моем шаблоне django? - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь отобразить некоторую информацию о теге SELECT в моем шаблоне, который проходит через для l oop и не может найти, как это сделать. Примеры, которые я нахожу на inte rnet, не являются динамическими (из другой таблицы), и я действительно борюсь с этим. Ниже приведены мои коды, надеюсь, вы, ребята, можете помочь мне в этом.

Это мои models.py


class Books(models.Model):
    [...]
    category_cod_category = models.ForeignKey(
        'Category',
        on_delete = models.CASCADE
        )

    class Meta:
        db_table = 'Books'

class Category(models.Model):
    category_name = models.CharField(
        max_length = 45
        )

    def __str__(self):
        return '%s' % self.category_name


    class Meta:
        db_table = 'Category'

Это мои views.py и этот фрагмент кода взят из другого шаблона, где у меня есть кнопка для редактирования.

def edit(request,id):
    book = Books.objects.get(id=id)
    return render(request,'edit.html',{'edit_book':book})

Это мой шаблон редактирования. html, где мне нужна категория книги для отображения. Все остальные поля в порядке.

<form method="POST" class="post-form" action="/update/{{ book.id }}">
    {% csrf_token %}

    [...]

    <div class="container">
        <label>Categoria do Livro:</label>
        <select class="selectpicker form-control" data-live-search="true">
            {% for books in Books %}
                <option value="{{ edit_livro.category_cod_category}}">{{ edit_livro.category_cod_category}}</option>
            {% endfor %}                                
        </select>
    <div>

    [...]

Можете ли вы, ребята, помочь мне? Или пришлите мне место, где я могу узнать, как решить эту проблему?

Извините за любые опечатки, я не являюсь носителем английского языка sh.

Спасибо!

РЕДАКТИРОВАТЬ: я использую ModelForms для моего шаблона вставки, он указан ниже:

class BooksForm(forms.ModelForm):
    class Meta:
        model = Books
        fields = [ ...,'category_cod_category', ... ]

1 Ответ

1 голос
/ 16 января 2020
# Step:1 
# Create url for views (listing, create, update)
urls.py

path(r'book-listing/', BookListView.as_view(), name='book-info-listing'),
path(r'book-info-create/', BookCreateView.as_view(), name='create-book-info'),
path(r'book-info-edit/<int:id>', BookUpdateView.as_view(), name='edit-book-info'),


# Step:2
# Create form for your model

forms.py

# You just need to set the queryset for your field of form, if you want to get the select tag for all your category

class BooksForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
    self.fields['category_cod_category'].queryset = Category.objects.all()

    class Meta:
        model = Books
        fields = [ ...,'category_cod_category', ... ]


# Step:3
# Create views for your model

views.py

# For Listing a book info

class BookListView(generic.ListView):
    model = Books

    def get_queryset(self):
        books = self.model.objects.all()
        return books


# For Creating a new book

class BookCreateView(generic.CreateView):
    model = Books
    form_class = BookForm
    template_name = 'project_app/book-form.html'

    def form_valid(self, form):
        form.save(self.request)
        return redirect('book-info-listing')


# For Editing or updating a book

class BookUpdateView(generic.UpdateView):
    model = Books
    form_class = BookForm
    template_name = 'project_app/book-form.html'
    success_url = reverse_lazy('book-info-listing')

    # get the object
    def get_object(self, *args, **kwargs):
        book_info = get_object_or_404(Books, pk=self.kwargs['id'])
        return book_info

    def form_valid(self, form):
        form.save(self.request)
        return redirect('book-info-listing')


# Step:4 Render form in your template

book-form.html

<form method="POST" class="books_form">
    {% csrf_token %}
    {{form.category_cod_category}}
</form>
...