territories = models.ManyToManyField(USStateField)
ManyToManyField的第一个参数必须是模型,模型名称或字符串'self'
有人可以帮助我如何将USStateField值放在ManyToManyField中吗?
谢谢! :d
答案 0 :(得分:0)
USStateField
是django.forms
的一部分; ManyToManyField
django.models
django.forms
的一部分CharField
:来自ManytoManyField
的内容无法在模型定义中使用。
解决方案是创建一个包含所有这些状态的单独模型,或者使用class USState(models.Model):
STATE_CHOICES = (
('AL', 'Alabama'),
('AK', 'Alaska'),
# ... and so on
)
name = models.CharField(max_length=2, choices=STATE_CHOICES)
class MyModel(models.Model):
territories = models.ManyToManyField(USState)
,并为其提供choices列表。
USState
的实现可能如下所示:
MyModel
假设您已经创建了m = MyModel()
m.territories.add(USState.objects.get(name="AL"))
m.save()
个实例,可以按如下方式将它们添加到{{1}}:
{{1}}
更多示例可以在Django文档中找到,例如here。
答案 1 :(得分:0)
为了构建jro的答案,我使用了localflavors.us.models.USStateField来创建一个简单的USState模型:
from django.db import models
from localflavor.us.models import USStateField
class USState(models.Model):
name = USStateField()
然后修改初始迁移以自动插入localflavors选项中的所有状态:
from django.db import models, migrations
import localflavor.us.models
from localflavor.us.us_states import STATE_CHOICES
def add_states(apps, schema_editor):
USState = apps.get_model("geography", "USState")
for state in STATE_CHOICES:
USState.objects.create(name=state[0])
class Migration(migrations.Migration):
dependencies = []
operations = [
migrations.CreateModel(
name='USState',
...
),
migrations.RunPython(add_states)
]