learning\u record\u recorddinningroom.room\u id不能为空

2024-09-29 17:16:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Django建立一个模型,可以记录另一个用户的修改历史。另外,在保存父模型时,我使用了signal函数来保存历史模型。其他所有型号都很好用

代码如下:

from control.model import DinningRoom`

class RecordDinningRoom(models.Model):
    room = models.ForeignKey(DinningRoom)

    datetime = models.DateTimeField('recordtime', auto_now=True)

    TURN_ON_OFF = (
        ('ON', 'On'),
        ('OFF', 'Off'),
    )

    TEMP = (
        ('HIGH', 'High'),
        ('MEDIUM', 'Medium'),
        ('LOW', 'Low'),
    )

    on_off = models.CharField(max_length=2, choices=TURN_ON_OFF)
    temp = models.CharField(max_length=2, choices=TEMP)

    #signal function: if a user is created, add control livingroom to the user    
def record_dinningroom(sender, instance, created, **kwargs):
    #the object which is saved can be accessed with **kwargs
    dinningroom = instance
    record = RecordDinningRoom(on_off=dinningroom.on_off, temp=dinningroom.temp)
    record.save() 
#    if created:
#        RecordLivingRoom.objects.create(user=instance)
post_save.connect(record_dinningroom, sender=DinningRoom)

保存外键模型时,跳转到错误页面,信息为“learning\u record\u recorddinningroom.room\u id不能为空”。我认为这可能是room = models.ForeignKey(DinningRoom)或signal and record\u dinning room()函数中的问题,但无法解决它


Tags: instance模型signalonmodelsrecordtemproom
2条回答

必须传递room参数才能创建RecordDinningRoom记录

class RecordDinningRoom(models.Model):
    room = models.ForeignKey(DinningRoom) # !!!!

此处:

record = RecordDinningRoom(room=dinningroom, on_off=dinningroom.on_off, temp=dinningroom.temp)
record.save() 

您需要为room设置RecordDinningRoom,因为它不是可选字段,请尝试以下操作:

record = RecordDinningRoom(
    on_off=dinningroom.on_off,
    temp=dinningroom.temp,
    room=instance
)

相关问题 更多 >

    热门问题