Django 返回模型中特定字段作为外键

1 投票
2 回答
1128 浏览
提问于 2025-04-20 16:38

我正在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)

撰写回答