Составной первичный ключ Django для таблицы дружбы без использования пользователя - PullRequest
1 голос
/ 11 ноября 2019

Я сделал это:

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, второй элемент как FK follower_id и Null для person_id. Есть ли способ сделать это так:

id   person_id   follower_id
1     1           2
2    10           1

1 Ответ

1 голос
/ 11 ноября 2019

Если вы посмотрите на документацию Django ,

Класс Model принимает только аргументы ключевых слов.

class Model(**kwargs)

Где аргументы ключевого слова - это просто имена полейвы определили для вашей модели.

Соответственно вам нужно изменить строку сохранения вашего объекта на:

f = Following(person=Person.objects.get(pk=1), follower=Person.objects.get(pk=2))
f.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...