2017-07-31 102 views
0

我在Django初学者,我试图用数组订购评论..Django管理订购

我里面models.py

class Comment(models.Model): 
    line_combination = models.ForeignKey(LineCombination, null=False, blank=False, default=1, on_delete=models.CASCADE) 
    name = models.CharField(max_length=100 , null=True , blank=True) 
    email = models.CharField(max_length=250,null=True , blank=True) 
    comment = models.TextField() 

    class Meta: 
     ordering = ['line_combination__line__name'] 

为线结合该类我有这个类:

class LineCombination(models.Model): 
     line = models.ForeignKey(Line, null=False, blank=False, on_delete=models.CASCADE) 
     combinations = models.ManyToManyField(GenoType, blank=False) 

     class Meta: 
     # Ordering the names of line Alphabetically 
     ordering = ['line__name'] 

的基因型我有这个类:

class GenoType(models.Model): 
    name = models.CharField(max_length=250, null=False, blank=False) 

我想要订购的类注释通过line_combination.combinations.name像这样:

ordering = ['line_combination__line__name' , 'line_combination__combinations__name'] 

line_combination.combinations.name是数组,所以我不能把它作为价值..

那么我该怎么做呢?

在此先感谢..

回答

0

一个LineCombination有很多GenoType S,所以,我们必须确定应该使用哪个行从GenoType S表示LineCombination排序,如果我们不希望在结果收到重复。

您可以手动确定该行:

class LineCombination(models.Model): 
     line = models.ForeignKey(Line, null=False, blank=False) 
     combinations = models.ManyToManyField(GenoType) 
     main_combination = models.ForeignKey(GenoType, null=True, blank=True) 

然后ordering = ['line_combination__main_combination__name']

在这种情况下,您必须添加一些逻辑来填充main_combination字段,例如以表格或signals填写。

或者你可以select this row when run queries

from django.db.models import Min 
Comment.objects \ 
    .annotate(main_name=Min('line_combination__combinations__name')) \ 
    .order_by('main_name')