不使用用户的友谊表的Django复合主键

时间:2019-11-11 10:13:52

标签: django database django-models

我已经做到了:

class Person(models.Model):
    name = models.CharField(max_length=100, unique=True)
    address = models.TextField(max_length=1000)

class Following(models.Model):
    following_id = models.AutoField(primary_key=True)

    person_id = models.ForeignKey('Person', on_delete=models.CASCADE, related_name='child')
    follower_id = models.ForeignKey('Person', on_delete=models.CASCADE, related_name='father')

    class Meta:
        unique_together = (("person_id", "follower_id"),)

如果我没有在外键中设置Null = True,我将得到错误消息;如果将其设置为True,它将创建如下的后续表:

id   person_id   follower_id
1     Null           2
10    Null           1

这是我向其中添加数据的方式:

Following(Person.objects.get(pk=1).id, Person.objects.get(pk=2).id)

我只想在两个FK中都有一个复合PK。它使第一项为PK,第二项为FK follower_id,而person_id为Null。有什么办法可以做到这样:

id   person_id   follower_id
1     1           2
2    10           1

1 个答案:

答案 0 :(得分:1)

如果您查看Django documentation

Model类仅接受关键字args。

class Model(**kwargs)

其中关键字参数只是您在模型上定义的字段的名称。

因此,您需要将对象保存行修改为:

f = Following(person=Person.objects.get(pk=1), follower=Person.objects.get(pk=2))
f.save()