2015-06-25 78 views
0

我有模特人 - 从另一个数据库 我将所有person_id复制到custom_id在Form ChoiceField中显示全名,但保存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()员工这让我访问其他对象模型在另一个数据库:所以基本上,当我在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年代。 我想要的形式是“Employee(..).person.full_name”,但只保存custom_id's

回答

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 
+0

我确切的代码。但是我得到这个错误 'MultipleObjectsReturned:get()返回多个Person - 它返回2!' – HereHere

+1

这意味着有多于一个''Person'与Employee的''custom_id''匹配''。你应该清理你的数据,以便每个Employee都只有一个Person,或者决定使用哪一个(例如第一个),并使用filter()而不是' get()'': ''返回Person.objects.filter(person_id = self.custom_id).first()'' –

+0

你是男人! – HereHere

相关问题