为Django标记自定义标记

时间:2015-11-25 06:28:02

标签: python django

您好我正在django做我的第一个项目,即创建reddit clone。我不确定如何设置我的模型,特别是设置标记部分。像reddit一样,我希望用户能够标记他们创建的社区。我找到了许多标记应用程序,使您可以标记为管理员制作的类别。但我希望我的用户标记他们制作的类别。

class Post(models.Model):
       created_at = models.DateTimeField(auto_now_add = True)
       title = models.CharField(max_length = 100)
       content = models.TextField()
       url = models.URLField(max_length=250, blank=True)
       image = models.ImageField(upload_to="images", blank=True, null=True)
       views = models.IntegerField(dfault=0)
       likes = models.IntegerField(dfault=0)




class Category(models.Model): 
    name = models.CharField(max_length=100, unique=True)

2 个答案:

答案 0 :(得分:0)

您应该在Post模型中添加多对多关系

class Post(models.Model):
       created_at = models.DateTimeField(auto_now_add = True)
       title = models.CharField(max_length = 100)
       content = models.TextField()
       url = models.URLField(max_length=250, blank=True)
       image = models.ImageField(upload_to="images", blank=True, null=True)
       views = models.IntegerField(dfault=0)
       likes = models.IntegerField(dfault=0)
       # Add a m2m field named categories
       categories = models.ManyToManyField(Category)

通过这种方式,您可以使用 -

获取帖子中所有相关类别的列表
post_object.categories.all()

对于添加标签的表单,您可以使用 -

class TagForm(forms.Form):
    tags = forms.MultipleChoiceField(
                                 widget=forms.SelectMultiple,
                                 choices=tag_options,
                                 required=True)

其中tag_options是元组的元组,包含从Category.objects.all()获得的各种标签

答案 1 :(得分:0)

根据我的理解,你需要的是理解Many2Many的关系。 帖子可以有很多类别,A类别会有很多帖子。

categories = models.ManyToManyField(
    Category)

进一步阅读read this .. :))