Ошибка Django Generic Relations: «невозможно разрешить ключевое слово« content_object »в поле»

Я использую общие отношения Django для определения модели голосования для моделей вопросов и ответов.

Вот моя модель голосования:

models.py

class Vote(models.Model): user_voted = models.ForeignKey(MyUser) is_upvote = models.BooleanField(default=True) # Generic foreign key content_type = models.ForeignKey(ContentType) object_id = models.PositiveIntegerField() content_object = generic.GenericForeignKey('content_type', 'object_id') class Meta: unique_together = ('content_type', 'user_voted') 

views.py

  user_voted = MyUser.objects.get(id=request.user.id) object_type = request.POST.get('object_type') object = None; if object_type == 'question': object = get_object_or_404(Question, id=self.kwargs['pk']) elif object_type == 'answer': object = get_object_or_404(Answer, id=self.kwargs['pk']) # THIS LAST LINE GIVES ME THE ERROR vote, created = Vote.objects.get_or_create(user_voted=user_voted, content_object=object) 

И затем я получаю эту ошибку:

 FieldError at /1/ Cannot resolve keyword 'content_object' into field. Choices are: answer, content_type, id, is_upvote, object_id, question, user_voted 

Когда я печатаю «объект» в консоли Django, он печатает объект «Вопрос 1». Поэтому я не понимаю, почему строка «content_object = object» дает мне полевую ошибку …

Есть идеи :(((???

благодаря

content_object – это атрибут только для чтения, который будет извлекать объект, указанный поля content_type и object_id . Вы должны заменить код следующим:

 from django.contrib.contenttypes.models import ContentType type = ContentType.objects.get_for_model(object) vote, created = Vote.objects.get_or_create(user_voted=user_voted, content_type=type, object_id=object.id) 

Редактировать: Документация Django явно замечает:

Из-за того, как реализован GenericForeignKey, вы не можете использовать такие поля непосредственно с фильтрами (например, filter () и exclude ()) через API базы данных. Поскольку GenericForeignKey не является обычным полевым объектом, эти примеры не будут работать:

 # This will fail >>> TaggedItem.objects.filter(content_object=guido) # This will also fail >>> TaggedItem.objects.get(content_object=guido)