我正在使用Django 1.7
class MyModel(models.Model):
my_random_field_1 = models.ForeignKey(
MyOtherModel, null=True, blank=True, related_name="random_1", default=get_random_1
)
my_random_field_2 = models.ForeignKey(
MyOtherModel, null=True, blank=True, related_name="random_2", default=get_random_2
)
'随机函数':
def get_random_1():
ob = MyOtherModel.objects.filter(...some filtering...)
try:
x = ob[0]
return x
except:
return None
def get_random_2():
ob = MyOtherModel.objects.filter(...some other filtering...)
try:
x = ob[1]
return x
except:
return None
当我尝试迁移时,我发出了这个错误:
TypeError: int() argument must be a string, a bytes-like object or a number, not 'MyOtherModel'
Sentry正在尝试发送2条待处理的错误消息 等待10秒
但在那之后,当我打开管理面板并转到MyOtherModel时,我有这个随机字段,并且他们正在通过' ob [0]'和' ob [1]'
答案 0 :(得分:2)
要使此代码有效,您应该将实例主键作为默认值发送,而不是实例本身。
def get_random_1():
ob = MyOtherModel.objects.filter(...some filtering...)
try:
x = ob[0]
return x.pk
except:
return None
def get_random_2():
ob = MyOtherModel.objects.filter(...some other filtering...)
try:
x = ob[1]
return x.pk
except:
return None
但是请注意,此值将在迁移文件中保持“烘焙”状态,并且迁移时数据库中的所有实例(例如旧数据)将获得单个值,因此这可能不是您的意思万特
较新版本的Django甚至不允许在对象实例中烘焙到迁移文件中这样的事情:D
ValueError: Cannot serialize: <Model: instance name>
There are some values Django cannot serialize into migration files.