【发布时间】:2020-11-26 10:13:45
【问题描述】:
我想在 Django 表单中显示一个下拉菜单,其中下拉项目是在另一个应用程序的另一个模型中指定的。这就是我的意思:
title/models.py
TITLE_CHOICES = (
('MR', 'Mr'),
('MS', 'Ms'),
('MISS', 'Miss'),
('MRS', 'Mrs'),
('MX', 'Mx'),
)
class Title(models.Model):
title_name = models.CharField(max_length=10, choices=TITLE_CHOICES)
def __str__(self):
return self.title_name
user/models.py
class User(models.Model):
...
user_title = models.ForeignKey('title.Title', on_delete=models.CASCADE)
...
user/forms.py
class SignupForm(forms.ModelForm):
user_title = forms.ModelChoiceField(queryset=Title.objects.all())
class Meta:
model = User
fields = '__all__'
def signup(self, request, user): #this is to override the **allauth** signup form
user.user_title = self.cleaned_data['title_name']
...
...
user.save()
非常感谢任何想法或建议。
谢谢。
【问题讨论】:
-
为什么不在 User 类中使用
user_title=models.CharField(max_length=10, choices=TITLE_CHOICES)呢? -
@riNg,我想将标题保留在单独的应用程序中,以便可以轻松地在我的 Django 项目中的其他应用程序中使用。
-
如果是这样,您必须在创建用户之前创建标题。它是空的,因为您的数据库中没有任何标题。
-
如果您不需要添加/更改/删除标题,那么您不需要标题模型。否则,如果您有很多默认标题并想自动创建它们,也许这会对您有所帮助stackoverflow.com/questions/46761148/…
-
您的数据库中是否有任何
Title实例?
标签: python django django-models django-forms