【问题标题】:Django trying to add "_id" to the primary key OneToOne columnDjango 尝试将“_id”添加到主键 OneToOne 列
【发布时间】:2019-09-21 20:52:58
【问题描述】:

刚开始使用 Django。 我有2个模型。 Radusergroup 和到期。用户名是 Radusergroup 上的主键和一个过期的 OnetoOne 字段,primary_key=True。 Django 正在尝试在过期模型中查询 username_id,尽管该字段本身只是用户名。

当我没有明确定义 Managed=False 时,它​​也会尝试将过期表中的用户名字段从数据库更改为 username_id。 我在这里做错了什么?

class Radusergroup(models.Model):
    username = models.CharField(max_length=64,primary_key=True)
    groupname = models.CharField(max_length=64)
    priority = models.IntegerField()
    class Meta:
        managed = False


class expiration(models.Model):
    username = models.OneToOneField(Radusergroup,on_delete=models.CASCADE, to_field='username', primary_key=True)
    expiration = models.DateTimeField()
    class Meta:
        managed = False
python .\manage.py shell
>>> help(expiration())
Help on expiration in module panel_app.models object:

class expiration(django.db.models.base.Model)
 |  expiration(*args, **kwargs)
 |
 |  expiration(username, expiration)
 |
 |  Method resolution order:
 |      expiration
 |      django.db.models.base.Model

 |      builtins.object
 |
 |  Methods defined here:
 |
 |  expiration = <django.db.models.query_utils.DeferredAttribute object>
 |  get_next_by_expiration = _method(self, *, field=<django.db.models.fields.DateTimeField: expiration>, is_next=True, **
kwargs)
 |
 |  get_previous_by_expiration = _method(self, *, field=<django.db.models.fields.DateTimeField: expiration>, is_next=Fals
e, **kwargs)
 |
 |  username_id = <django.db.models.query_utils.DeferredAttribute object>
 |  ----------------------------------------------------------------------

【问题讨论】:

  • 你不明白什么?关系字段是指整个相关对象;底层数据库字段存储该对象的 ID。
  • 阅读this

标签: django python-3.x django-models


【解决方案1】:

感谢 dirkgroten 为我指明了正确的方向。 添加 db_column 解决了我的问题

class expiration(models.Model):
    username = models.OneToOneField(Radusergroup,on_delete=models.PROTECT, to_field='username',db_column="username" , primary_key=True)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 2016-10-07
    • 2012-02-20
    • 1970-01-01
    相关资源
    最近更新 更多