我正在尝试执行简单的操作,通过“ManyToMany”外键将授权用户包含在辅助模型的实例中。
模型:
from django.contrib.auth.models import User
class Entry(models.Model):
author = models.ManyToManyField(User, verbose_name='Заявку оформил')
我从数据库条目创建现有用户的实例:
>>> u = User.objects.get(pk=2)
>>> u
<User: doctor>
现在我将此用户传递给 Entry 实例:
>>> entry = Entry(id=1, author=u)
我遇到了一个例外:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "Z:\Django\DjangoWeb\env\lib\site-packages\django\db\models\base.py", line 568, in __init__
_setattr(self, prop, kwargs[prop])
File "Z:\Django\DjangoWeb\env\lib\site-packages\django\db\models\fields\related_descriptors.py", line 537, in __set__
manager.set(value)
File "Z:\Django\DjangoWeb\env\lib\site-packages\django\db\models\fields\related_descriptors.py", line 983, in set
objs = tuple(objs)
TypeError: 'User' object is not iterable
我究竟做错了什么?
问题是它在模型中
Entryauthor有一个类型ManyToManyField,并且在创建对象时,它需要一个可迭代的 User 对象,因此正确的条目将是如果
Entry您只打算每个用户最多连接一个用户,那么使用ManyToManyField. 将其替换为ForeignKey或OneToOneField(阅读更多:https ://docs.djangoproject.com/en/2.2/ref/models/fields/#s-module-django.db.models.fields.related )