【发布时间】:2021-08-31 03:45:15
【问题描述】:
我在更新 fk 时遇到问题。
Views.py
estandares =
EstandarProducto.objects.select_related('recinto','producto','proveedor').prefetch_related
(Prefetch('carreras')).filter(recinto=id_recinto)
for proveedor in estandares:
if proveedor.proveedor_id == None or proveedor == "":
EstandarProducto.objects.filter(id=proveedor.id).update(proveedor_id=1)
x=EstandarProducto.objects.get(id=proveedor.id)
print("ID proveedor : ", x.proveedor.id )
Models.py
class EstandarProducto(models.Model):
''''''
costo_unitario_uf = models.DecimalField(max_digits=20, decimal_places=5, default=0)
cantidad = models.IntegerField(default=0)
total_uf = models.DecimalField(max_digits=20, decimal_places=5, default=0)
recinto = models.ForeignKey(Recinto, related_name='estandares_producto', on_delete=models.CASCADE)
producto = models.ForeignKey(
Producto, related_name='estandares_producto', on_delete=models.PROTECT)
proveedor = models.ForeignKey(
Proveedor, related_name='estandares_producto', on_delete=models.CASCADE, blank=True, null=True)
carreras = models.ManyToManyField(Carrera, related_name="estandares_productos", blank=True)
class Proveedor(models.Model):
'''Datos de contacto de un proveedor de cotizaciones o de estandar.'''
nombre = models.CharField(max_length=500)
direccion = models.CharField(max_length=1000, blank=True, null=True)
correo = models.EmailField(blank=True, null=True)
telefono = models.CharField(max_length=12, blank=True, null=True)
def __str__(self):
return f"{self.nombre} - {self.direccion}"
问题是按预期打印返回 1,但是当我查看数据库时没有任何变化。
【问题讨论】:
-
您说它反映在打印上,打印只是从数据库中获取值,因此您正在查看的数据库/表或您正在检查的记录不是正确的。我也试过了,效果很好。
-
我知道它不起作用,因为我打印了 3 次,并且只有当我在 Proveedor.id 字段的 EstandarProducto 上获得空值时才会出现错误。
标签: python-3.x django django-models django-views