0

我得到了这个资源,它工作正常并列出了员工的所有属性。

class EmployeeResource(ModelResource):
    journey = fields.ForeignKey(WorkJourney, 'work_journey')
    class Meta:
        queryset = Employee.objects.all()
        resource_name = 'employee'
        authentication = BasicAuthentication()

我有一个写在员工模型类上的方法,它列出了员工的电话号码(可怕的代码 imo。,我认为它应该是一个属性,但我无法更改它)。

@property
def phones(self):
    return u' / '.join([self.personal_phones or u'', self.institutional_phones or u''])

重点是编写一个 Resource 方法来访问该 Model 方法并使用 Employee 的属性列出结果。

4

2 回答 2

1

您应该能够将其创建为资源中的只读字段:

phones = fields.CharField(attribute='phones', readonly=True)

如果您不设置readonly=True,Tastypie 将尝试在插入/更新时设置该字段的值。

于 2013-02-08T16:03:30.643 回答
1

如果您的手机型号如下所示:

class Phone(models.Model)
     employee = models.ForeignKey(Employee, related_name=phones)

然后,您可以使用电话在 EmployeeResource ToManyRelation 中定义来获取员工的所有电话列表:

class EmployeeResource(ModelResource):
   phones = fields.ToManyField(PhoneResource, 'phones', full=True)
class Meta:
    queryset = Employee.objects.all()
    resource_name = 'employee'
    authentication = BasicAuthentication()

此外,通过覆盖脱水方法,您可以自定义将发送到客户端的数据。

自定义视图是发送自定义数据的另一种解决方案。

于 2013-02-08T18:49:32.443 回答