访问模型字段DetailView

时间:2014-02-25 17:48:32

标签: python django class-based-views

我遇到的问题是我无法访问html {{ profile.slug }}中的模型字段。在模板中我可以访问模型,让我告诉你。

我有2个型号Profile,和Oferto。 在Oferto模型的详细视图中,我想链接到创建Oferto的用户配置文件。 Oferto模型有一个现场用户,

我正在尝试查找与Oferto.user

相对应的profile.slug

以下是在测试浏览器中看到的

[<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()

如果您想知道我使用mixin的原因,请参阅答案 django - DetailView how to display two models at same time

我的模特

# 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 个答案:

答案 0 :(得分:1)

profile是一个查询集,而不是一个实例。查询集没有slug属性。

您需要在额外方法中获取Profile的特定实例,或者遍历模板中的配置文件。

答案 1 :(得分:0)

[<Profile: Red>]在测试输出中可见这一事实表明您正在将Profile实例正确传递给模板。

因此问题出在profile.slug之内。您确定slug课程上有Profile字段吗?