当我输入来自 shell 的第一个 class 的信息时,如何访问另一个 class?

How i can acces to another class, while i'm enter the information for the first class from shell?

我正在尝试填写来自 shell 的模型,并且我正在尝试填写输入信息 ( ForeignKey ),使其可以访问另一个 class。 那是我在 pycharm 中的代码:

class Team(models.Model):

   name = models.CharField(max_length=256, unique=True)
   details = models.TextField()
   def __str__(self):  
       return self.name




class Player(models.Model):

    name = models.CharField(max_length=256)
    number = models.IntegerField()
    age = models.IntegerField()

    position_in_field = models.CharField(max_length=256, choices=(('1', 'حارس'), ('2', 'دفاع'), ('3', 'وسط'), ('4', 'هجوم')))
    is_captain = models.BooleanField(default=False)
    team = models.ForeignKey(Team)

    def __str__(self):
        return '{} - {}'.format(self.name, self.team)

这是结果:

python manage.py shell
Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 22:20:52) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from teams.models import Player
>>> from teams.models import Team
>>> Player.objects.create(name='محمد إبراهيم', number='25', age='27', position_in_field='هجوم', is_captain=False, team='فريق الزمالك')
Traceback (most recent call last):
 File "<console>", line 1, in <module>
  File "D:\cj\projects\django\teammanager_env\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "D:\cj\projects\django\teammanager_env\lib\site-packages\django\db\models\query.py", line 392, in create
    obj = self.model(**kwargs)
  File "D:\cj\projects\django\teammanager_env\lib\site-packages\django\db\models\base.py", line 555, in __init__
    _setattr(self, field.name, rel_obj)
  File "D:\cj\projects\django\teammanager_env\lib\site-packages\django\db\models\fields\related_descriptors.py", line 216, in __set__
    self.field.remote_field.model._meta.object_name,
ValueError: Cannot assign "'فريق الزمالك'": "Player.team" must be a "Team" instance.

当您使用外键创建记录时,您必须通过其主键在引用模型中指明该记录。

在模型 Team 的情况下,您没有显式设置主键,因此 Django 设置默认字段 mode_id,这是一个自动增量PositiveIntegerField,这是你必须在引用记录中指出的。

Player.objects.create(name='محمد إبراهيم', number='25', age='27', position_in_field='هجوم', is_captain=False, team_id=1)

如果你有引用团队的模型对象,你也可以使用它:

Player.objects.create(name='محمد إبراهيم', number='25', age='27', position_in_field='هجوم', is_captain=False, team=team_instance)