【发布时间】: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