Django Tastypie ToOneField错误

时间:2015-02-12 23:51:52

标签: python django

我尝试创建一个一对一的关系,将一个表与属性计费记录匹配到另一个具有物理地址,但我不断收到此错误。当我搜索错误时,没有任何显示与此情况相关的信息。

我不知道" [< PropertyRecord:242811400004>]"正在引用,因为它不是一个PIN码,并且不存在于任何表格中。

此外,我已经完成了数据,并且两个表中的引脚都没有空值。

出现此错误:

{
error: "The object '[<PropertyRecord: 242811400004>]' has an empty attribute 'pin' and doesn't allow a default or null value."
}

型号:

class PropertyRecord(models.Model):
    pin = models.BigIntegerField(db_index=True, max_length=20)
    date_added = models.DateField(null=True)
    last_chgdte = models.DateField()
    name = models.CharField(db_index=True, max_length=30, null=True)
    address1 = models.CharField(max_length=100, null=True)
    address2 = models.CharField(max_length=100, null=True)
    city = models.CharField(max_length=50, null=True)
    state = models.CharField(max_length=2, null=True)
    zip = models.CharField(max_length=10, null=True)

    class Meta:
        unique_together = ("pin", "last_chgdte")
        select_on_save = True

    def __str__(self):
        return str(self.pin)


class PropertyAddress(models.Model):
    pin = models.BigIntegerField(db_index=True, max_length=20, unique=True)
    street_address = models.CharField(max_length=50, null=True)
    city_name = models.CharField(max_length=50, null=True)
    zip_code = models.IntegerField(max_length=5, null=True)

    class Meta:
        select_on_save = True

    def __str__(self):
        return str(self.pin)

资源:

class PropertyAddressResource(ModelResource):

    class Meta:
        queryset = PropertyAddress.objects.all()


class PropertyRecordResource(ModelResource):

    full_address = fields.ToOneField(
        PropertyAddressResource,
        attribute=lambda bundle: PropertyRecord.objects.filter(pin=bundle.obj.pin),
        full=True,
        null=True
    )

    class Meta:
        queryset = PropertyRecord.objects.all()
        resource_name = 'propertyrecords'

1 个答案:

答案 0 :(得分:0)

我无法想象加入表格不是常见的需求,所以应该有一个简单的解决方案。

相反,我能够通过使用脱水来解决这个问题,脱水感觉过于复杂但有效。 +1这是一个PITA,有额外的步骤来序列化数据。

def dehydrate(self, bundle):

    query_data = PropertyAddress.objects.filter(pin=bundle.obj.pin)
    results = serialize('json', query_data, fields=('street_address', 'city_name', 'zip_code'))
    bundle.data['full_address'] = json.loads(results)
    return bundle