我有模特:
class Category(models.Model):
description = models.CharField(unique=True, max_length=200)
class Car(models.Model):
categorys = models.ManyToManyField(Category)
不断增加新车。
我希望获得最后20个类别的车型。
我必须设置一个过滤器,但是当我按顺序排序时,我再也无法得到它。
由于我无法关闭任何逻辑,所以我不会把我在这里尝试过的东西。
更新
我添加3辆汽车:
汽车1有2个类别(cat1和cat2)
Car 2有3个类别(cat2,cat20,cat3)
Car 3有2个类别(cat4,cat1,cat90)
我需要得到: cat1,cat2,cat3,cat4,cat20,cat90等......
答案 0 :(得分:0)
所以你有这个模型:
class Category(models.Model):
description = models.CharField(unique=True, max_length=200)
class Car(models.Model):
categorys = models.ManyToManyField(Category)
根据这句话:
我想得到最后20个类别的汽车 加入。
起初我们必须找到这辆车:
car = Car.objects.get("""your parameters""")
然后我们必须找到类别:
category = car.category_set.all()[:20]
试试这个
<强> UPD 强>
当您获得所需的所有Cars
和Category
时,您可以访问任何类别对象。
categories = Cars.objects.filter("""your filter""").select_related('categorys')
for category in categories.categorys_set():
print(category.description)
答案 1 :(得分:0)
我使用 extra()函数来解决问题。 见代码打击:
class School(models.Model):
...
tag = models.ManyToManyField(Tag)
def tags(self):
meta = self.tag.through._meta
db_table = meta.db_table
primary_key = meta.pk.name
order_by = [db_table + '.' + primary_key]
return list(self.tag.extra(order_by=order_by).values_list('name', flat=True))
通过按顺序添加到sql语句,按
通过(如果未指定django会自动为您创建一个表)生成结果顺序表。 希望这会有所帮助。