2012-09-28 54 views
0

我想创建一个模型方法,它将采用给定评论的 的“用户”(这是CharField),然后返回与UserProfile的 部分定义的用户关联的“报价”。我正在尝试创建方法以及模板。我迄今为止尝试过的东西似乎没有奏效。如何编写引用另一个模型的模型方法?

我知道最好的做法是让 的用户字段回复给用户,但我想知道如何用 方法做到这一点,这样我就可以学习。

models.py

class Reviewbackup(models.Model): 
    review = models.CharField('Review', max_length = 2000) 
    user = models.CharField('Username', max_length = 200) 
    rating = models.IntegerField(max_length=2, choices=RATING_OPTIONS) 
    product = models.ForeignKey(Productbackup) 
    def __unicode__(self): 
     return self.review 

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    quote = models.CharField('About', max_length = 200, null=True, blank=True) 
    website = models.URLField('Personal website/blog', null=True, blank=True) 
    facebook = models.URLField('Facebook profile page', max_length = 200, null=True, blank=True) 
    twitter = models.URLField('Twitter profile page', max_length = 200, null=True, blank=True) 
    youtube = models.URLField('YouTube channel page', max_length = 200, null=True, blank=True) 

views.py

def view_reviews(request, product_name): 
    product = get_object_or_404(Productbackup, url_friendly=product_name) 
    product_id = product.id 
    #get reviews for the this product 
    reviews = Reviewbackup.objects.filter(product_id=product_id).order_by("-created_on") 
    return render_to_response('reserve/templates/view_reviews.html', {'reviews':reviews}, 
     context_instance=RequestContext(request)) 

模板

{% for review in reviews %} 
{{review.user}} 
<br>{{review.user.userprofile.quote}} 
{% endfor %} 
+0

你有没有考虑寻找它在'User'? –

+0

@ IgnacioVazquez-Abrams你是什么意思? – sharataka

回答

1

如果问题的条件说“不使用用户一个ForeignKey,但使用CharField对于用户名“,您可以将该方法添加到您的Reviewbackup模型中,例如:

def get_user_quote(self): 
    return UserProfile.objects.get(user__username=self.user).quote 

,并在模板中使用它:

{{ review.get_user_quote }} 

但你真的应该更换你的用户领域外键

+0

谢谢@Dima。我意识到使它成为一个ForeignKey会容易得多,但我正努力应对这一事实,即我的应用程序中已经有相当多的数据。你能帮我理解使用方法的缺点与ForeignKey相反吗? – sharataka

+0

Reviewbackup数据库表仅存储用户表中的用户标识。默认情况下,它会有一个适当的索引,这样连接表格的工作就会更快。 使用ForeignKey,您可以更容易地通过orm访问数据,就像这种情况一样:'{{review.user.userprofile.quote.quote}}'etc –

+0

如果我尝试用ForeignKey(User)替换CharField,是否会产生影响关于我的应用中已有的数据?我是否必须重新装入所有内容,因为用户以前是指字符串而不是对象? – sharataka

相关问题