Доступ к полям моделей DetailView
У меня проблема в том, что я не могу получить доступ к полям модели в HTML {{ profile.slug }}
, В шаблоне я могу получить доступ к модели, позвольте мне показать вам.
У меня есть 2 модели профиля и Oferto. В подробном представлении модели Oferto я хочу указать ссылку на профиль пользователя, создавшего Oferto. Модель Oferto имеет полевого пользователя,
Я пытаюсь найти profile.slug
что отвечает Oferto.user
Следующее видно в браузере из теста
[<Profile: Red>]
Name: oFFER
User: Red
Description:
Time: 9
Stelo: None
Requirements:9
и шаблон выглядит следующим образом
{% block content %}
<a>{{ profile }}</a>
<p>Name: {{ oferto.name }}</p>
<p>User: {{ oferto.user }}</p>
<p>Description: {{ oferto.descripion }}</p>
<p>Time: {{ oferto.time }}</p>
<p>Stelo: {{ oferto.stelo }}</p>
<p>Requirements:{{ oferto.requirements }}</p>
<hr>
<p>Location: {{ oferto.location }}</p>
<p>tags: {{ oferto.tags }}</p>
<p>{{ PROJECT_URL }} / {{ STATIC_URL }}{{ oferto.image }}</p>
{% endblock %}
если я попытаюсь использовать profile.slug
это просто выходит пустым и не находится в HTML
views.py
class OfertoDetailView(ExtraContextMixin,DetailView):
model = Oferto
def extra(self):
profile = Profile.objects.all()
return dict(profile = profile)
class ExtraContextMixin(object):
def get_context_data(self, **kwargs):
context = super(ExtraContextMixin, self).get_context_data(**kwargs)
context.update(self.extra())
return context
def extra(self):
return dict()
если вам интересно, почему я использую миксин, посмотрите ответ от django - DetailView, как отображать две модели одновременно
Мои модели
# Ofertoj.models.py
class Oferto(models.Model):
user = models.ForeignKey(User)
# profile = models.OneToOneField(Profile)
name = models.CharField(max_length=150)
description = models.TextField(max_length=3000)
time = models.DecimalField(max_digits= 10000000,decimal_places =2,null= True)
stelo = models.DecimalField(max_digits= 10000000,decimal_places =2,null= True)
location = models.TextField(max_length=3000)
slug = AutoSlugField(('slug'), max_length=128, unique=True, populate_from=('name',))
tags = tagging.fields.TagField()
image = models.ImageField(upload_to='Ofertoj',blank=True, null=True)
requirements = models.TextField(max_length=550000,blank=True, null=True)
def get_absolute_url(self):
return reverse('oferto_detail', kwargs={'slug': self.slug})
def __unicode__(self):
return self.name
def get_tags(self):
return Tag.objects.get_for_object(self)
# turtle.models.py
class BaseInfo(models.Model):
name = models.CharField(max_length=100)
contact_name = models.CharField(max_length=100)
email = models.EmailField(max_length=75)
phone = models.CharField(max_length=20)
address = models.CharField(max_length=3000)
city = models.CharField(max_length=3000)
state = models.CharField(max_length=3000)
code = models.IntegerField()
country = models.CharField(max_length=3000)
image = models.ImageField(upload_to='photos/%Y/%m/%d',blank=True)
slug = AutoSlugField(('slug'), max_length=128, unique=True, populate_from=('name',))
tags = tagging.fields.TagField()
def __unicode__(self):
return self.name
def get_tags(self):
return Tag.objects.get_for_object(self)
# profile.models.py
class Profile(BaseInfo):
bio = models.TextField(max_length=15000000)
user = models.ForeignKey(User)
def get_absolute_url(self):
return reverse('profile_detail', kwargs={'slug': self.slug})
# tempilo.profiles.UserProfiles
from models import Profile
class MyUser(AbstractBaseUser):
identifier = models.CharField(max_length=40, unique=True)
USERNAME_FIELD = 'identifier'
profile = OneToOneField(Profile,primary_key=True)
2 ответа
profile
это набор запросов, а не экземпляр. Querysets не имеют slug
приписывать.
Вам нужно либо получить конкретный экземпляр Profile в вашем дополнительном методе, либо пройтись по профилям в вашем шаблоне.
Дело в том, что [<Profile: Red>]
виден в тестовом выводе указывает, что вы проходите Profile
экземпляр к шаблону правильно.
Поэтому проблема заключается в profile.slug
, Вы уверены, что у вас есть slug
поле на вашем Profile
учебный класс?