我試圖保存客戶記錄的現有實例。其車型擁有M2M車型(因爲客戶可以有多輛車)。在閱讀了幾個問題/答案後,我仍然不知道如何解決這個問題。更新Django中現有的M2M關係
顧客模型:
class Customer(models.Model):
vehicle_id = models.ManyToManyField(VehicleSale)
name = models.CharField(max_length=40, blank=True, db_index=True, null=True,
verbose_name='name')
lic = models.CharField(max_length=20, blank=True, db_index=True, null=True,
verbose_name='license')
addr = models.CharField(max_length=40, blank=True, null=True, verbose_name='address')
city = models.CharField(max_length=15, blank=True, null=True, verbose_name='city')
state = models.CharField(max_length=2, blank=True, null=True, verbose_name='state')
zip = models.CharField(max_length=10, blank=True, null=True, verbose_name='zipcode')
email = models.EmailField(blank=True, null=True, verbose_name='email')
tel1 = models.CharField(max_length=15, blank=True, verbose_name='Tel. 1', null=True)
tel2 = models.CharField(max_length=15, blank=True, verbose_name='Tel. 2', null=True)
ssn = models.CharField(max_length=12, blank=True, db_index=True, null=True,verbose_name='SSN')
class Meta:
db_table = 'customer'
def __unicode__(self):
return self.name
def save(self, *args, **kwargs):
self.name = self.name.upper()
self.addr = self.addr.upper()
self.city = self.city.upper()
self.state = self.state.upper()
return super(Customer, self).save(*args, **kwargs)
在視圖中,定義客戶爲
customer = current_vehicle.customer_set.all()
後我嘗試以下:
if 'customer' in request.POST:
if customer:
customer_form = CustomerForm(request.POST, instance=customer[0])
if customer_form.is_valid():
customer_form.save()
還試圖customer_form之前加入定義:
customer.vehicle_id = current_vehicle.id
和表單後則此:
customer_form.vehicle_id = current_vehicle.id
形式是無效的,所以它不會被保存。在檢查{{form.errors}}時,它總是報告vehicle_id是必需的。
最後,在this答案後,我把它調整到我的方案中加入:
obj = customer_form.save(commit=False)
,並希望指定vehicle_id,但立即失敗。
我錯過了什麼?
謝謝。
月1日編輯: 視圖上的部分現在看起來:
customer_form = CustomerForm(request.POST, instance=customer[0])
customer_form.save()
customer_form.vehicle_id.add(current_vehicle)
車輛是否可以與多個客戶關聯?如果不是,那麼我認爲你的車型不正確,你應該在車型上有一個客戶外鍵,並且根本沒有M2M字段。請顯示模型定義並顯示您的完整視圖。 –
你在什麼版本的Django上? – Anentropic
是在原始源代碼中正確縮進的保存方法的最後一行嗎? – Anentropic