我有一个String[] absisse = new String[3];
JSONArray factures= json.getJSONArray("factures");
for (int i = 0; i < factures.length(); i++) {
JSONObject c = factures.getJSONObject(i);
int nbr = c.getString("nbr_fact");
for(int z=0;z<absisse.length;z++){
absisse[z]=nbr;
System.out.println("value mois "+absisse[z]);
}
}
模型和一个Training
模型,它们之间有一个ManyToMany关系。我遇到的问题是Django默认强制执行唯一性,并且不可能在同一Drill
上有重复的练习。
要解决这个问题,我可以在设置ManyToMany关系时使用Training
参数,但这会导致Django Rest Framework出现很多问题。
还有其他办法吗?我是否必须创建through=
模型才能在我的M2M关系中强制执行唯一性?
我与DRF有关的问题是我还需要为创建的新模型安装一个中间串行器。当我想发送through=
数据时,这会导致问题,因为它会对其进行验证并删除所有Drill
数据,因为由于需要自定义序列化程序,它需要Drill
(中间模型)。
这一小小的变化确实很快就需要大量的额外变化。必须有更好的方法。
答案 0 :(得分:0)
通过模型回答您的问题:
通过模型通常用于向多对多关系添加更多信息(例如,如果您需要添加一些排序顺序,或者关系形成的日期,等等。我相信您会得到这个想法)。
不要使用through =来实现唯一性:
关于沿着这条路走下去以避免唯一性,我认为这不是正确的思考方式。基于Django自己的例子here 你会看到你可以多次将相同的实例添加到m2m关系中:
>>> a2 = Article(headline='NASA uses Python')
>>> a2.save()
>>> a2.publications.add(p1, p2)
>>> a2.publications.add(p3)
Adding a second time is OK:
>>> a2.publications.add(p3)
可以在任何一方(通常不是两者)施放多对多关系,这是实现目标的一种方式:
class Drill(models.Model):
training = models.ManyToManyField(Training)
anotherfield = models.CharField('some other field description', max_length = 128)
class Training(models.Model)
yetAnotherField = models.CharField('yet another field description', max_length = 128)
希望这有帮助