在 Form ChoiceField 中显示全名但保存 ID
Display full names in Form ChoiceField but saving ID's
我有模型 Person - 来自另一个数据库
我把所有 person_id
复制到 custom_id
.
models.py
class Employee(models.Model):
custom_id = models.CharField(max_length=20, unique=True)
@property
def person(self):
return Person.objects.get(person_id='%s' % self.custom_id)
def __str__(self):
return '%s' % self.custom_id
class Task(models.Model):
employee = models.ManyToManyField(Employee, blank=True, null=True)
task = models.CharField(max_length=100)
comment = models.CharField(max_length=200)
def __str__(self):
return '%s' % self.task
我将我的方法 person()
添加到 Employee 中,这允许我访问另一个数据库中的其他对象模型:
所以基本上当我在shell中输入这个时:
Employee.objects.get(custom_id='123').person.full_name
u'Adam Dylan'
我有一个 ModelForm
使用 ModelMultipleChoiceField
forms.py
class TaskCreateForm(forms.ModelForm):
employee = forms.ModelMultipleChoiceField(queryset=Employee.objects.all())
class Meta:
model = Task
但是 Employee.objects.all()
returns 一堆 custom_id 的。
我想要的是以“Employee(..).person.full_name
”形式显示但只保存 custom_id's
.
我不确定为什么您认为我对您的其他问题的回答在这里不起作用。您是否尝试过以下操作?如果不行,具体是怎么失败的?
class EmployeeMultipleChoiceField(ModelMultipleChoiceField):
def label_from_instance(self, obj):
return obj.person.full_name
class TaskCreateForm(forms.ModelForm):
employee = EmployeeMultipleChoiceField(queryset=Employee.objects.all())
class Meta:
model = Task
我有模型 Person - 来自另一个数据库
我把所有 person_id
复制到 custom_id
.
models.py
class Employee(models.Model):
custom_id = models.CharField(max_length=20, unique=True)
@property
def person(self):
return Person.objects.get(person_id='%s' % self.custom_id)
def __str__(self):
return '%s' % self.custom_id
class Task(models.Model):
employee = models.ManyToManyField(Employee, blank=True, null=True)
task = models.CharField(max_length=100)
comment = models.CharField(max_length=200)
def __str__(self):
return '%s' % self.task
我将我的方法 person()
添加到 Employee 中,这允许我访问另一个数据库中的其他对象模型:
所以基本上当我在shell中输入这个时:
Employee.objects.get(custom_id='123').person.full_name
u'Adam Dylan'
我有一个 ModelForm
使用 ModelMultipleChoiceField
forms.py
class TaskCreateForm(forms.ModelForm):
employee = forms.ModelMultipleChoiceField(queryset=Employee.objects.all())
class Meta:
model = Task
但是 Employee.objects.all()
returns 一堆 custom_id 的。
我想要的是以“Employee(..).person.full_name
”形式显示但只保存 custom_id's
.
我不确定为什么您认为我对您的其他问题的回答在这里不起作用。您是否尝试过以下操作?如果不行,具体是怎么失败的?
class EmployeeMultipleChoiceField(ModelMultipleChoiceField):
def label_from_instance(self, obj):
return obj.person.full_name
class TaskCreateForm(forms.ModelForm):
employee = EmployeeMultipleChoiceField(queryset=Employee.objects.all())
class Meta:
model = Task