<p>可能的解决方案:</p>
<pre><code># models.py
class IPAddressApp(models.Model):
ip = models.GenericIPAddressField()
app = models.CharField(max_length=100)
class Meta:
unique_together = (
("ip", "app"),
)
# forms.py
from django.apps import apps
class IPAddressAppForm(forms.ModelForm):
app = forms.ChoiceField()
class Meta:
model = models.IPAddressApp
fields = (
'ip',
'app',
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['app'].choices = self.get_apps()
def get_apps(self):
return [(app, "{} ({})".format(config.verbose_name, app)) for
app, config in apps.app_configs.items()]
</code></pre>
<p>其他选项:</p>
<ul>
<li>对于多对多字段,使用<code>App</code>模型并使用应用程序的<a href="https://docs.djangoproject.com/en/1.10/ref/applications/#django.apps.AppConfig.ready" rel="nofollow noreferrer">^{<cd2>}</a>方法上的上述代码填充它</李>
<li>对应用程序使用<code>ArrayField(CharField)</code>(<a href="https://docs.djangoproject.com/en/1.8/ref/contrib/postgres/fields/#arrayfield" rel="nofollow noreferrer">Postgresql only</a>)</李>
</ul>