我对Django比较陌生。
我有以下两种模式。
class Tag(models.Model):
tag = models.CharField(max_length=70, unique=True)
class Meta:
verbose_name = "Tag"
verbose_name_plural = "Tags"
def __unicode__(self):
return self.tag
class Test(models.Model):
testname = models.CharField(max_length=240)
tags = models.ManyToManyField("Tag", null=True, blank=True)
category = models.ForeignKey("Category", null=True, blank=True)
class Meta:
verbose_name="Test"
verbose_name_plural="Tests"
当我检索测试时,它按照标签ID的顺序给我特定测试的标签。我的要求是按标签添加到特定测试的顺序显示标签。
例如,我添加了带有标签java,.net,python的测试test1。然后使用django标签进行第二次测试test2。更新了test2以添加标签python,java。
现在,当我显示test2时,它显示的标签是-java,python,django。我希望它以链接顺序显示,例如django,python,java。[根据添加到特定测试的标签。]
我试图在其他订购文档中找到答案,但无法获得答案。
谢谢您的帮助。
从https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships中,您可以尝试如下操作:
class Tag(models.Model):
tag = models.CharField(max_length=70, unique=True)
class Meta:
verbose_name = "Tag"
verbose_name_plural = "Tags"
def __unicode__(self):
return self.tag
class Test(models.Model):
testname = models.CharField(max_length=240)
tags = models.ManyToManyField(Tag, through='TagOrder')
category = models.ForeignKey(Category, null=True, blank=True)
class Meta:
verbose_name="Test"
verbose_name_plural="Tests"
class TagOrder(models.Model): #added extra model for adding an additional field 'added'
test = models.ForeignKey(Test)
tag = models.ForeignKey(Tag)
added = models.DateTimeField()
在视图中:
category= Category.objects.get(id='id')
tag= Tag.objects.get_or_create(tag='some_tag')
test= Test.objects.get_or_create(testname= 'some test', category= category )
tagorder= TagOrder.objects.create(test= test, tag= tag, added= datetime.now())
tags= TagOrder.objects.filter(test=test).order_by('added').select_related('tag')
for t in tags:
print t.tag.tag
PS:它是未经测试的代码
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句