簡體   English   中英

Django-向模型添加代表用戶的外鍵

[英]Django - Adding a foreign key representing a user to a model

似乎在任何地方都找不到我的問題的答案。 你是我唯一的希望。 因此,我有一個已經遷移的現有模型。 我想向此模型添加外鍵,以將其鏈接到“ auth.User”表。 這是我的代碼如下所示:

from django.db import models
from django.contrib.auth.models import User

class Beer(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    brand = models.CharField(max_length = 100,default='')
    beer_type = models.CharField(max_length = 100,default='')
    ml = models.IntegerField(default=330)
    owner = models.OneToOneField(User,default=User.objects.get(pk=2), related_name="beers")

然后,我嘗試創建遷移文件:

python manage.py makemigrations

我得到以下錯誤:

Migrations for 'beers':
0003_beer_owner.py:
- Add field owner to beer
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management     /__init__.py", line 338, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 330, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 393, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 444, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/makemigrations.py", line 143, in handle
self.write_migration_files(changes)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/makemigrations.py", line 171, in write_migration_files
migration_string = writer.as_string()
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/writer.py", line 166, in as_string
operation_string, operation_imports = OperationWriter(operation).serialize()
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/writer.py", line 124, in serialize
_write(arg_name, arg_value)
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/writer.py", line 87, in _write
arg_string, arg_imports = MigrationWriter.serialize(_arg_value)
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/writer.py", line 377, in serialize
return cls.serialize_deconstructed(path, args, kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/writer.py", line 268, in serialize_deconstructed
arg_string, arg_imports = cls.serialize(arg)
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/writer.py", line 465, in serialize
"topics/migrations/#migration-serializing" % (value, get_docs_version())
ValueError: Cannot serialize: <User: user>
There are some values Django cannot serialize into migration files.
For more, see https://docs.djangoproject.com/en/1.8/topics/migrations    /#migration-serializing

有什么線索可以解決嗎? 這可能與我使用的默認值有關。 顯然,用戶對象無法序列化。 謝謝

您需要提供數據庫等效值,並且由於您將其鏈接到主鍵,因此需要提供主鍵作為默認值:

owner = models.OneToOneField(User,
                             default=User.objects.get(pk=2).pk,
                             related_name="beers")

或者,您可以簡化整個過程,並通過直接提供整數值來保留它:

owner = models.OneToOneField(User, default=2, related_name="beers")

一點不吭就走了; 您應該確保數據庫中具有該ID的User; 理想情況下使用數據遷移。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM