2015-05-17 114 views
0

如何将几个不同的类别添加到NewsDjango创建关系

class Categories(models.Model): 

title = models.CharField(max_length=100) 
c_date = models.DateTimeField('date published') 
url_code =models.URLField() 
def __unicode__(self): return self.title 



class News(models.Model): 
title = models.CharField(max_length=100) 
content= models.TextField() 
categories = models.ForeignKey(Categories) 
c_date = models.DateTimeField('date published')  
     image =models.ImageField(upload_to = 'img/', 
      default ='img/None/no-img.jpg')  
url_code =models.URLField() 

def __unicode__(self): return self.title 

回答

0

现在,你只能有每一个类别新闻项目;因为您的数据库关系被定义为一对一。

要使新闻项目可以有多个类别,请将关系更改为ManyToMany

class News(models.Model): 
    categories = models.ManyToManyField(Category) 

现在,类别添加到新闻:

n = News() 
c = Category.objects.get(pk=1) # fetch one category 
n.save() # Save the news item first 
n.categories.add(c) # add the category for the news item 
c = Category.objects.get(pk=2) # fetch another 
n.categories.add(c) 
n.save() 

要提取的每个类别,那么所有的新闻条目标签与该类别:

当我尝试显示
c = Category.objects.all() 
for category in c: 
    for news in category.news_set.all(): 
     print(news) 
+0

新闻由django管理添加,所以我必须输入该代码,对不起,我是新的django –

+0

你把它您想要显示类别的位置。 –

+0

对不起有一个问题什么是PK,为什么只有两个类别被添加到新闻,谢谢 –

1

使用ManyToManyField

class News(models.Model): 
    .... 
    categories = models.ManyToManyField(Categories) 

UPDATE:要输出的类别列表中使用如下代码:

{% for news in news_list %} 
    <h4>{{ news.title }}</h4> 
    <div> 
     Categories: 
     {% for category in news.categories.all %} 
      {{ category.title }} 
     {% endfor %} 
    </div> 
{% endfor %} 
+0

不工作类别我有news_list.Categories.None –

+0

要显示类别使用'news.categories.all()'queryset。查看我答案中的更新。 – catavaran

+0

类别是我的网站的菜单,当我选择一些类别,我必须看到这个类别的新闻,无论如何谢谢 –