我讀過的一切,我可以找到關於在Django多對多的關係,但到目前爲止,我沒有看到任何東西ManyToMany-Through關係以及Django獨自處理的簡單ManyToMany。如何保存一個多對多的關係通過,解決了我有具體問題的Django模型,並定期多對多關係
考慮這些機型:
class Treatment(models.Model):
...
book = models.ManyToManyField(Book, through='TreatmentLocation')
category = models.ManyToManyField(Category)
class Book(models.Model):
name = models.CharField(...)
class TreatmentLocation(models.Model):
treatment = models.ForeignKey(Treatment)
book = models.ForeignKey(Book)
page = models.CharField(...)
class Category(models.Model):
name = models.CharField(...)
我已經得到了數據即將在POST陣列上好聽,但finagling查看被證明是非常棘手。
def save_treatment(request):
form = TreatmentForm(request.POST)
if form.is_valid():
treatment = form.save()
pages = request.POST.getlist('page')
books = request.POST.getlist('book')
counter = 0
for page in pages:
book_id = books.__getitem__(counter)
TreatmentLocation.objects.create(treatment_id=treatment.id, book_id=book_id, page=page)
counter = counter + 1
form.save_m2m()
else:
...
治療成功保存,因爲這樣做TreatmentLocations,但一旦我打電話save_m2m()來存儲處理類別外部參照,我得到的Cannot set values on a ManyToManyField which specifies an intermediary model. Use TreatmentLocation Manager
錯誤。
有誰知道如何節省的這些東西?我想避免訴諸原始SQL。
我相信我的文章我回答你的問題。這裏是:http://stackoverflow.com/questions/26608903/avoid-django-def-post-duplicating-on-save/26619058#26619058 – 2014-10-28 21:49:01