每次用户添加新帖子时,用户信息中的国家/地区名称都会重复。例如。美国有人加贴,美国名字重复了很多次。我尝试使用不同的 'country = Post.objects.all().distinct('country')' 然后我收到这个错误 'DISTINCT ON fields is not supported by this database backend'。我的意见.pydef countries(request): country = Post.objects.all().distinct('country') context = { 'posts': country } return render(request, 'users/countries.html', context)我的模型.pyfrom PIL import Imagefrom django.db import modelsfrom django.urls import reversefrom django.utils import timezonefrom django.db.models.signals import post_savefrom django.contrib.auth.models import AbstractUserclass User(AbstractUser): first_name = models.CharField(verbose_name="First name", max_length=255) last_name = models.CharField(verbose_name="First name", max_length=255) country = models.CharField(verbose_name="Country name", max_length=255) city = models.CharField(verbose_name="City name", max_length=255) email = models.EmailField(verbose_name="Email", max_length=255) def __str__(self): return self.usernameclass Post(models.Model): title = models.CharField(max_length=255) country = models.CharField(max_length=255) city = models.CharField(max_length=255) address = models.CharField(max_length=255) email = models.EmailField(max_length=255) phone = models.CharField(max_length=255) website = models.URLField(max_length=255) date_posted = models.DateTimeField(default=timezone.now) author = models.ForeignKey(User, on_delete=models.CASCADE) def __str__(self): return self.title def get_absolute_url(self): return reverse('users:blog')
2 回答

一只斗牛犬
TA贡献1784条经验 获得超2个赞
如果您只需要国家/地区列表,为什么不使用.values()
?如果您只想要国家/地区列表,我认为以下代码应该可以完成这项工作?
countries = Post.objects.values("country").distinct()
结果将是一个带有类似 dict 对象的查询集,即:
[{"country": "USA"}, {"country": "Canada"}, ...]

慕斯709654
TA贡献1840条经验 获得超5个赞
我猜您正在使用 SQLite 数据库。.distinct()
不能与 sqlite3 一起使用,因此您必须切换到 postgresql 之类的东西才能使用它或修改您的查询。
所以如果你不能改变你的数据库,那么只需手动过滤你的数据库。但认为切换到另一个数据库将是这个问题的最佳解决方案
添加回答
举报
0/150
提交
取消