Django: content_type_id в GenericForeignKey - PullRequest
       24

Django: content_type_id в GenericForeignKey

0 голосов
/ 18 декабря 2018

Я написал этот класс в соответствии с документацией, чтобы иметь возможность голосовать за что-либо с идентификатором в приложении:

class Vote(models.Model):

    class Meta:
        unique_together = ('voted_id', 'voter_id', 'content_type', 'vote_type')

    voted_id        = models.PositiveIntegerField()
    vote_type       = models.BooleanField(null=True)
    content_type    = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    voter_id        = models.PositiveIntegerField()
    content_object  = GenericForeignKey('content_type', 'voter_id')

    def __str__(self):
        return self.content_object

Затем в таблице базы данных у меня есть 5 столбцов:

id, voted_id, vote_type, voter_id, content_type_id

Я не очень понимаю, на что ссылается content_type_id: виртуальный идентификатор?

Потому что в моем понимании, когда я писал:

from forum.models import User, Vote
kdelanyd = User.objects.get(username='kdelanyd')
v = Vote(content_object=kdelanyd, voted_id=1, vote_type=False)
v.save()

, я думал, что content_type содержит ссылку 'kdelanyd', а затем, в некоторой степени, его идентификатор: это не так.

1 Ответ

0 голосов
/ 20 декабря 2018
  • В вашей базе данных может быть таблица django_content_typecontent_type, content_type_id, content_object ссылка в этой таблице.Он используется для определения чего-то вроде «типа» вашего data.

  • Как и wheel, это может быть колесо car или bicycle.В этом случае car и bicycle - это content_object.И идентификатор car и bicycle в таблице django_content_type равен content_type_id

...