Django 返回模型中特定字段作为外键
我正在Django的models.py文件中创建一个类。当我创建第二个类时,这个类里有一个外键指向第一个类。这个外键的值是“1”或“2”等等。
我想知道是否可以设置Django,让它使用特定的字段作为外键。
举个例子:
class Customer(models.Model):
name = models.CharField(max_length=64)
myid = models.CharField(max_length=64)
class Setting(models.Model):
owner = models.ForeignKey(Customer)
...
然后我有一个视图
def getsetting(request):
response = serializers.serialize('json', Setting.objects.all())
return HttpResponse(response, content_type='json')
返回的json数据中,"owner"字段的值显示为“1”、“2”等等。
所以我的问题是,我能不能用“name”或者“myid”作为外键?或者有没有简单的方法可以在json中覆盖这些字段?
谢谢!
2 个回答
1
看看使用自然键的序列化。你可以在这里阅读官方文档:https://docs.djangoproject.com/en/1.7/topics/serialization/#natural-keys
这其实很简单,只需要在你的类里添加一个方法:
class Customer(models.Model):
name = models.CharField(max_length=64)
myid = models.CharField(max_length=64)
def natural_key(self):
return (self.myid, )
然后使用 use_natural_foreign_keys=True
来进行序列化:
def getsetting(request):
response = serializers.serialize('json', Setting.objects.all(),
use_natural_foreign_keys=True)
return HttpResponse(response, content_type='json')
1
“如果你想指定一个自定义的主键,只需要在你的某个字段上设置 primary_key=True。” https://docs.djangoproject.com/en/1.4/topics/db/models/#automatic-primary-key-fields
所以,你可以这样修改你的 Customer 类:
class Customer(models.Model):
name = models.CharField(max_length=64)
myid = models.CharField(primary_key=True, max_length=64)