Как сделать выпадающий выбор в поле CreateView - Django

я добавляю новое поле (location) в PostCreateView

и я хочу иметь возможность выбрать это поле, если оно уже есть в базе данных. (например, Нью-Йорк)

он отображается, но очевидно, что это не выпадающий список.

views.py

class PostCreateView(LoginRequiredMixin, CreateView):
    model = Post
    fields = ['title', 'content', 'location'] 
    success_url = '/'

    

models.py

class Location(models.Model):
    location = models.CharField(max_length=100)


    def __str__(self):
        return self.location


    def get_absolute_url(self):
        return reverse('home')

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    location = models.CharField(max_length=100, default="")


    def total_likes(self):
        return self.likes.count()


    def __str__(self):
        return self.title


    def get_absolute_url(self):
        return reverse('post-detail', kwargs={'pk': self.pk})



Я пытался добавить это

widgets= {
        'location': forms.Select(attrs={'class': 'form-control'})
    }

прямо под моим классом PostCreateView, но я думаю, что это не работает, поскольку я не использую forms.py, а вместо этого использую класс PostCreateView внутри views.py

В вашем models.py файле компонент location должен быть ForeignKey. В этом случае ваша модель должна выглядеть следующим образом:

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    location = models.ForeignKey(Location, on_delete=models.CASCADE)

Когда вы добавляете это поле в свою форму или определяете поля из CreateView оно будет отображаться как выпадающее.

Вернуться на верх