如何在Django的CreateView中对字段进行排序?

如何在Django的CreateView中对字段进行排序?,django,Django,去年一月份我刚刚学习了django,目前我正在网站上储存和展示歌词。我的问题是,在createview中,字段没有排序 这是我的models.py: class Singer(models.Model): song_singer = models.CharField(max_length=200) def __str__(self): return self.song_singer def get_absolute_url(self): return reverse('sin

去年一月份我刚刚学习了django,目前我正在网站上储存和展示歌词。我的问题是,在createview中,字段没有排序

这是我的models.py:

class Singer(models.Model):
song_singer = models.CharField(max_length=200)

def __str__(self):
    return self.song_singer

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

class Lyrics(models.Model):
title = models.CharField(max_length=50)
singer = models.ForeignKey(Singer, on_delete=models.RESTRICT)
type = models.ForeignKey(Type, on_delete=models.RESTRICT)
lyrics = models.TextField()
Views.py:

class AddSongView(LoginRequiredMixin, CreateView):
model = Lyrics
fields = ['title', 'singer', 'type', 'lyrics']


正如您在所附的屏幕截图中看到的,singer字段中的选项未排序。如何对这些选择进行排序?谢谢大家!

最简单的方法是在您的
Singer
型号上定义一个默认值,如果您没有指定其他订购方式,这将按名称订购项目:

class Singer(models.Model):
    # …
    class Meta:
        ordering = ['song_singer']
class-Singer(models.Model):
# …
类元:

ordering=['song_singer']
最好在此处使用模型表单。这也为您提供了进一步修改表单的机会:

from django import forms

class SongForm(forms.ModelForm):
    singer = forms.ModelChoiceField(queryset=Singer.objects.all().order_by('song_singer'))
    
    class Meta:
        model = Lyrics
        fields = ['title', 'singer', 'type', 'lyrics']

class AddSongView(LoginRequiredMixin, CreateView):
    form_class = SongForm

请分享你的
Singer
model.`class Singer(models.model):song\u Singer=models.CharField(max\u length=200)这是我的歌手模型。谢谢请回答你的问题。哇,我没想到会有人这么快回答我的问题。你的回答解决了我的问题。非常感谢你!顺便说一句,这是我在stackoverflow的第一篇文章。我会试试这篇。非常感谢你!