首先要提前感谢您为全球社区提供的所有帮助,这是一项非常宝贵的服务。我把代码写成一个爱好,现在我想完成一个项目(我的第一个),我作为个人目标,并将帮助一个非营利组织,现在我发现自己处于某种尴尬的位置,因为英语不是我的母语,所以找到答案(可能已经在StackOverflow上)对我来说是一个问题。这也是我的第一个问题......希望做得好。 BTW Django太棒了......我有这两个模型:
# models.py
class CabMovimiento(InfoComun):
"""
Guarda información de la cabecera de los movimientos
internos de equipos, salvo préstamos. Hereda de
InfoComun los campos.
"""
nro = models.IntegerField(
default=lambda: ult_nro_mov('cm'), verbose_name="Número", blank=True)
det = models.ManyToManyField(
'inventario.Equipo', through='DetMov', verbose_name="componente")
class Meta:
verbose_name = 'Movimiento Interno'
verbose_name_plural = 'Movimientos Internos'
def los_detalles(self):
return "\n".join([d.serie for d in self.det.all().filter(self.id)])
los_detalles.short_description = "Detalles"
class DetMov(models.Model):
"""
Guarda el detalle de cada documento generado por los
movimientos internos, a excepción de los préstamos.
"""
cab = models.ForeignKey('CabMovimiento')
eqp = models.ForeignKey('inventario.Equipo', verbose_name='Equipo/s')
tip_mov = models.ForeignKey(
'inventario.Tmetl',
limit_choices_to={
'asociacion': 'E', 'tipo': 'M'
}, verbose_name='Tipo de Movimiento')
for_mov = models.CharField(
max_length=1, choices=fmov,
default='U', verbose_name='Forma Movimiento')
diag = models.CharField(max_length=80, verbose_name='Diagnóstico')
class Meta:
verbose_name = 'Detalle de Movimiento'
verbose_name_plural = 'Detalles de Movimientos'
我已阅读并重新阅读django(1.5)关于信号,保存和保存相关方法的文档,我已经在这里和其他有趣的博客中遵循了几个教程,但我无法得到我想要的东西.... 我需要检测作为DetMov一部分的for_mov字段是否会改变值,类似于状态字段但是指的是移动某些东西的方式,并且可能是“U”,对于一个,或者&#39 ; C'完整的,指的是一组东西。
一旦检测到并且简单的移动(' U'),必须忽略更改或添加,但如果完全移动(' C'),您必须搜索数据库并向表格内联添加更多行并保存。我知道如何进行查询,但不知道如何添加它们......我认为我必须使用RAW Sql,虽然不太优雅,但不会丢弃。
对不起,如果它非常简单,如果你不明白我想要什么就很抱歉,因为我正在使用GTranslate。 TIA。
答案 0 :(得分:0)
一种可能的解决方案是覆盖save()
上的DetMov
方法,以便您获取最新值并检查它是否已更改。
def save(self, *args, **kwargs):
if self.id and self.for_mov == 'C':
stored_for_mov = DetMov.objects.get(id=self.id).values_list('for_mov', flat=True)[0]
if stored_for_mov != self.for_mov:
# The stored value isn't 'C'
# Add the other records you need to.
super(DetMov, self).save(*args, **kwargs)
我不太确定你是否需要在' U'的情况下阻止保存。我并没有真正遵循这一部分,但这应该可以帮助您解决您遇到的问题。您也可以将此全部转换为post_save
信号。