Я хочу сделать галерею пользователей по Photologue
. Чтобы подключить профили пользователей к моделям фотолога, я хочу использовать OneToOne
. Также я хочу ... скажем, «переопределить» фотолога get_absolute_url
, который используется шаблонами.FieldDoesNotExist with OneToOne
# models
from photologue.models import Gallery
from profiles.models import UserProfile
class GalleryExtended(models.Model):
gallery = models.OneToOneField(Gallery)
user = models.ForeignKey(UserProfile, verbose_name=_('user'), on_delete=models.CASCADE)
def get_absolute_url(self):
return reverse('profiles_user:profiles_gallery-details', args=[self.user.user_url, self.gallery.slug])
# views
from photologue.views import Gallery
from profiles.models import UserProfile
from .models import GalleryExtended, PhotoExtended
def get_user_gallery_queryset(self):
user = get_object_or_404(UserProfile, user_url=self.kwargs['user_url'])
gallery = Gallery.objects.filter(galleryextended__user=user)
return gallery
class ProfileGalleryDateView(object):
date_field = 'date_added'
allow_empty = True
get_queryset = get_user_gallery_queryset
# site.com/username/gallery (shows photos + images with a filter by year)
class ProfileGalleryPhotoArchiveIndexView(ProfileGalleryDateView, ArchiveIndexView):
template_name = 'galleries/gallery_n_photo_archive.html'
Так в виду, если я делаю
gallery = Gallery.objects.filter(galleryextended__user=user)
шаблоны начинают использовать Photologue-х get_absolute_url
(я не использую в ядро photologue
сек URL url(r'^photologue/', include('photologue.urls', namespace='photologue')),
как я интегрировать приложение в моем URL-адрес схемы)
можно ли вернуться к чему-то вроде этого
gallery = GalleryExtended.objects.filter(user=user).***(get fields from Gallery)***
и избегать django.core.exceptions.FieldDoesNotExist: GalleryExtended has no field named 'date_added'
, чтобы начать использовать get_absolute_url
от GalleryExtended
?
Я знаю, это легко решить, расширив модель photologue
через наследование, но я хочу знать, можно ли использовать OneToOne? потому что в некоторых источниках, которые я прочитал, рекомендуется использовать 1to1 вместо наследования.
Я не думаю, что вы либо понимаете свою проблему, либо очень четко объясняете нам. Исключение 'FieldDoesNotExist' не имеет ничего общего с дилеммой модели OneToOne. Вместо этого где-то вы запрашиваете значение поля 'date_added' из' GalleryExtended', но поскольку этого не существует, вы получаете сообщение об ошибке. Расскажите, пожалуйста, что вы хотите достичь с этим ответом, и мы сделаем все возможное. – makaveli
@ makaveli. У собственной модели 'photologue' Gallery' есть несколько полей (включая 'date_added'). Если я делаю QuerySet с использованием модели «Галерея», 'get_absolute_url' используется из модели« Галерея ». Я хочу использовать 'get_absolute_url' из модели GalleryExtended, но у этой модели нет всех полей, которые требуется коду. Мой вопрос: возможно ли получить поля (или, может быть, instanse, я точно не знаю) модели «Галерея» со стороны модели GalleryExtended? Перефразируемый вопрос может быть: можно ли с OneToOne получить что-то вроде наследования, когда один экземпляр имеет все функции обеих моделей? – TitanFighter
Ну да, если я правильно вас понимаю, вы просто просите «GalleryExtended.objects.filter (user = user) .first(). Gallery. <Имя поля/метода>», то есть 'GalleryExtended.objects.filter (пользователь = пользователь) .first(). gallery.title'. Правильно я или нет? – makaveli