如何制作多选字段?

时间:2014-11-08 18:50:30

标签: python django

请帮助解决问题。我有一组对象:

class Entry(models.Model):
    user = models.ForeignKey(
        User, 
        verbose_name=u"Пользователь", 
        blank=True, 
        null=True,
    )
    title = models.CharField(
        verbose_name=u"Название", 
        max_length=100,
    )
    video_url = models.URLField(
        verbose_name=u"Адрес видео", 
        max_length=100,
        null=True,
        blank=False,
    )   
    description = HTMLField(
        verbose_name=u'Описание',
        max_length=50000, 
        default=None,
        blank=True,
    )
    views = models.IntegerField(
        verbose_name=u'Количество просмотров',
        default=0,
        null=False,
        blank=True,
    )   
    likes = models.IntegerField(
        verbose_name=u'Количество лайков',
        default=0,
        null=False,
        blank=True,
    )           
    date = models.DateTimeField(
        verbose_name=u'Дата создания',
        default=datetime.now(),
        #auto_now=True,
    )
    last_edit_date = models.DateTimeField(
        verbose_name=u'Дата последнего редактирования',
        default=datetime.now(),
        auto_now=True,
    )       
    is_active = models.BooleanField(
        verbose_name=u'Активно',
        default=True,
    )                   
    is_delete = models.BooleanField(
        verbose_name=u'Удалено админом',
        default=False,
    )   
    tags = models.ManyToManyField(Tag.title)

我想将每个对象与多个标签相关联。这个模型是为标签编写的:

class Tag(models.Model):
    title = models.CharField(
        verbose_name=u"Название", 
        max_length=100,
    )
    description = HTMLField(
        verbose_name=u'Описание',
        max_length=50000, 
        default=None,
        blank=True,
    )           
    date = models.DateTimeField(
        verbose_name=u'Дата создания',
        default=datetime.now(),
    )
    last_edit_date = models.DateTimeField(
        verbose_name=u'Дата последнего редактирования',
        default=datetime.now(),
        auto_now=True,
    )       
    is_active = models.BooleanField(
        verbose_name=u'Активно',
        default=True,
    )                   

    class Meta:
        verbose_name = u"""тег"""
        verbose_name_plural = u"""теги"""

问题是控制台在任何输入错误上显示以下消息:

  File "/home/kalinins/.virtualenvs/kinopom_project/kinopom_env/local/lib/python2.7/site-packages/django/db/models/loading.py", line 75, in _populate
    self.load_app(app_name, True)
  File "/home/kalinins/.virtualenvs/kinopom_project/kinopom_env/local/lib/python2.7/site-packages/django/db/models/loading.py", line 99, in load_app
    models = import_module('%s.models' % app_name)
  File "/home/kalinins/.virtualenvs/kinopom_project/kinopom_env/local/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in import_module
    __import__(name)
  File "/home/kalinins/.virtualenvs/kinopom_project/kinopom/kinopom/models.py", line 41, in <module>
    class Entry(models.Model):
  File "/home/kalinins/.virtualenvs/kinopom_project/kinopom/kinopom/models.py", line 94, in Entry
    tags = models.ManyToManyField(Tag.title)        
AttributeError: type object 'Tag' has no attribute 'title'

请帮忙解决

1 个答案:

答案 0 :(得分:1)

删除行.title中的tags = models.ManyToManyField(Tag.title) ManyToManyField只需要一个模型,并且你给它一个这个模型的属性,这个属性不起作用,因为Tag是一个类而不是一个实例。
如果您希望标记在显示时显示标题,只需编写 unicode 方法即可。

class Tag(models.Model):
    #your fields here

    def __unicode__(self):
        return u"{0}".format(self.title)