(道歉,如果我错过了一些关键信息来帮助诊断这一点 - 我是Python和Django的新手。)
当我尝试在ManyToManyField中通过属性使用字符串时,Django抱怨:
File "/vagrant/flamingo_env/lib/python3.4/site-packages/django/db/models/fields/related.py", line 1366, in _check_relationship_model
for f in through._meta.fields:
AttributeError: 'str' object has no attribute '_meta'
用法:
class Voter(models.Model):
# ...
addresses = models.ManyToManyField(Address, through='voter_addresses', through_fields=('voter_id', 'address_id'))
如果我创建一个Through模型,错误就会消失:
class VoterAddress(models.Model):
voter_id = models.ForeignKey(Voter)
address_id = models.ForeignKey(Address)
class Meta:
db_table = 'voter_addresses'
但当然,它抱怨Voter还没有被定义 - 我不能简单地改变顺序,否则VoterAddress也不会被定义。
在每个例子中,我都看到了使用的基本字符串版本。发生了什么事?
答案 0 :(得分:2)
您需要修改传递给using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace MyApp
{
class MyClass
{
public MyClass()
{
var MyProcess = System.Diagnostics.Process.GetProcesses().FirstOrDefault(f => f.ProcessName == "MyProcess");
}
}
}
through
必须是自定义 addresses = models.ManyToManyField(Address, through='VoterAddress')
如果您未传递throughmodel
参数,则无需创建throughmodel
。 Django将为您创建和管理一个
答案 1 :(得分:0)
要解决您的订购问题,您可以为ForeignKey
类提供字符串值。
class VoterAddress(models.Model):
voter_id = models.ForeignKey("Voter")
address_id = models.ForeignKey("Address")
class Meta:
db_table = 'voter_addresses'
这是一种将外键定义到尚未在文件中定义的模型的方法。
如果你改变了这个,Django不会抱怨Voter hasn't been defined
。