python - 如何删除数据库中的重复项
问题描述
问题是所有字段都重复了,我想按顺序为所有产品实现一个字段。我尝试使用 .distinct(),它不起作用。你可以看到照片;
class Order(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
items = models.ManyToManyField(OrderItem)
start_date = models.DateTimeField(auto_now_add=True)
ordered_date = models.DateTimeField()
ordered = models.BooleanField(default=False)
billing_address = models.ForeignKey('BillingAddress', on_delete=models.SET_NULL, blank=True, null=True)
payment = models.ForeignKey('Payment', on_delete=models.SET_NULL, blank=True, null=True, related_name='payment_opt')
def __str__(self):
return self.user.username
def orders(request):
order = Order.objects.filter(user=request.user.id, ordered=True).distinct()
context = {
'order': order,
}
return render(request, 'orders.html', context)
{% for order in order %}
<p class="text-muted my-2" style="font-size:14px">
Address: {{ order.billing_address.street_address|capfirst }}</p>
<p class="text-muted my-2" style="font-size:14px">
Apartment Address: {{ order.billing_address.apartment_address|capfirst }}</p>
<p class="text-muted my-2" style="font-size:14px"> City: {{ order.billing_address.city|capfirst }}
</p>
<p class="text-muted my-2" style="font-size:14px"> State: {{ order.billing_address.state|capfirst }}
</p>
<p class="text-muted" style="font-size:14px">
Country: {{ order.billing_address.country.name|capfirst }}</p>
{% endfor %}
解决方案
正如 Willem 正确指出的那样,在像您这样查询单个模型时,通常不可能有真正的重复。所以 distinct() 不会改变查询中的任何内容,因为所有对象都是不同的(由于 pk)
问题是你认为什么是重复的。你可以做的是使用distinct
on values
。例如,如果您只希望每个用户和帐单地址有一条不同的线路,您可以这样做
result = Order.objects.values('billing_address', 'user').distinct()
结果将是一个包含dicts
两个键的查询集:“billing_address”和“user”,dict 的值是pk
andBillingAddress
对象User
。
因为您可能需要实际值而不是模板中的 pks 将上面的查询与这样的循环结合起来
result = Order.objects.values('billing_address__street_address', 'billing_address__apartment_address', 'user').distinct()
如文档中所述,对此有一些警告。那里还提到,只有在 PostgreSQL 上,您才能将字段作为参数直接添加到,distinct()
但我既没有尝试过,也没有提到您的数据库
推荐阅读
- reactjs - 在 createStackNavigators 中的抽屉路径中获取图标 initialRoute 嵌套在 createDrawerNavigator 中
- c# - 获取特定应用程序的屏幕截图(Android 模拟器)
- unity3d - Unity 中的 ThreeJS 着色器
- python - 使用 pybind11,如何将我的代码拆分为多个模块/文件?
- regex - 如何用一个正则表达式提取字符串?
- python - 如何使用 SQLAlchemy 将新记录插入到有关每个现有数据的关联表中
- java - java selenium - 导航到分页表上未显示的页码
- jms - 如果在带有 XA 和 RA 的 MDB 上没有提交待处理,ActiveMQ 会丢失消息
- ios - 如何更改 UISearchController 中文本字段的背景颜色?
- java - javax.net.ssl.SSLException:java.security.ProviderException:无法派生密钥