代码之家  ›  专栏  ›  技术社区  ›  William

对具有一对一关系的模型的更改未保存

  •  0
  • William  · 技术社区  · 8 年前

    我使用Django的OneToOneField建立了两个模型,如下所示: https://docs.djangoproject.com/en/2.0/topics/db/examples/one_to_one/

    class Seats(models.Model):
        north = models.OneToOneField('User',on_delete=models.CASCADE,related_name='north', default=None, null=True)
        bridgetable = models.OneToOneField('BridgeTable',on_delete=models.CASCADE, default=None, null=True)
    
    class BridgeTableManager(models.Manager):
    
        def create_deal(self):
            deal = construct_deal()
            table = self.create(deal=deal)
            s = Seats(bridgetable=table)
            s.save()
            return table
    
    class BridgeTable(models.Model):
        deal = DealField(default=None,null=True)
    

    当我运行此代码时,我可以成功地使关系正常工作

    table = BridgeTable.objects.get(pk='1')
    user = User.objects.get(username=username)
    table.seats.north = user
    table.seats.north.save()
    print(table.seats.north)
    

    print语句打印出坐在北方的球员的名字。但如果我再次尝试这样访问表:

    table = BridgeTable.objects.get(pk='1')
    print(table.seats.north)
    

    我得到的是“None”,而不是用户名。是否有什么东西我遗漏了,比如我遗漏的一次扑救或我不理解的一些概念?谢谢

    1 回复  |  直到 8 年前
        1
  •  1
  •   Amar    8 年前

    您应该保存Seats模型对象,即 table.seats.save()

    尝试 print table.seats.north

    虽然 table.seats.north.save() 运行保存时间 User 对象

    以下是正确的步骤:

    table = BridgeTable.objects.get(pk='1')
    user = User.objects.get(username=username)
    table.seats.north = user
    table.seats.save()
    print(table.seats.north)