在Form ChoiceField中显示全名,但保存ID

时间:2015-06-25 14:21:36

标签: django django-models django-forms django-views

我有模型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()会返回一堆custom_id' s。 我想要的是以表格形式展示" Employee(..).person.full_name"但只保存custom_id's

1 个答案:

答案 0 :(得分:0)

我不确定为什么你认为我给你的另一个问题的答案在这里不起作用。你试过以下吗?如果它不起作用,它究竟是如何失败的?

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