禁止直接分配给多对多集的前端。请改用specific.set()

时间:2019-03-09 15:08:55

标签: django-models django-forms django-views

enter code here models.py 

{

views.py


def registered_cust1(request, id):
	obj = get_object_or_404(Customer1, id= id)
	ob = Customer.objects.all()
	checked = request.POST.getlist('checks[]')
	c_checked = []

	form = RawCustomer1Form()
	if request.method == 'POST':
		
		form =RawCustomer1Form(request.POST)
		if form.is_valid():
			try:
				for check in checked :
					new_check = get_object_or_404(Menu, name=check)
					c_checked.append(new_check)
				#user = Customer.objects.get(mobile_number=request.POST['mobile_number'])
				print(form.cleaned_data)
				product = Customer1.objects.create(**form.cleaned_data)
				product.particular.set(*c_checked)
				context = { "object": obj, "ob":ob,}
				return render(request, 'customer/customers_details.html', context )
			except Customer.DoesNotExist:
				return render(request, "customer/registered_cust.html", {'error':'no mobile number found'})
		else:
			print(form.errors)
	
		
	context = {
	    'form': form,
	    "object": obj,
	    "ob":ob,
	   	
	}
	return render(request, 'customer/customers_details.html', context)
forms.py


class RawCustomer1Form(forms.Form):
	mobile_number = forms.CharField(label='Mobile Number', widget=forms.TextInput(attrs={"placeholder": "Customer Number"}))
	particular = forms.ModelMultipleChoiceField(queryset=Menu.objects.all(), widget=forms.CheckboxSelectMultiple)
	qty = forms.DecimalField()
	#rate = forms.DecimalField()
	amount_paid = forms.DecimalField()
models.py

class Customer1(models.Model):
	mobile_number = models.CharField(max_length=12, unique=False)
	particular  = models.ManyToManyField(Menu, related_name="particular", blank=True, null=True)
	qty    = models.DecimalField(decimal_places=1, max_digits=100)
	subtotal    = models.DecimalField(default=00, decimal_places=2, max_digits=10000)
	total    = models.DecimalField(default=00, decimal_places=2, max_digits=10000)
	amount_paid =  models.DecimalField(decimal_places=2, max_digits=10000)
	date_cust = models.DateTimeField(default=datetime.now(), blank=True)
	#objects = UserManager()
	
	def __str__(self):
		return str(self.id)

	def get_pdf_bill(self):
		return reverse("bill_pdf", kwargs={"id": self.id})

def m2m_changed_cust_receiver(sender, instance, action, *arg, **kwargs):
	print(action)
	if action == 'post_add' or 'post_remove' or 'post_clear':
		products = instance.particular.all()
		total = 0
	for x in products:
		total += x.rate
	if instance.subtotal != total:
		instance.subtotal = total
	
		instance.save()
m2m_changed.connect(m2m_changed_cust_receiver, sender=Customer1.particular.through)

def pre_save_cust_receiver(sender, instance, *args, **kwargs):
	instance.total = instance.subtotal

pre_save.connect(pre_save_cust_receiver, sender=Customer1)

类Customer1(models.Model):     mobile_number = models.CharField(max_length = 12,unique = False)     特别= models.ManyToManyField(菜单,related_name =“ particular”,blank = True,null = True)     数量= models.DecimalField(decimal_places = 1,max_digits = 100)     小计= models.DecimalField(默认= 00,小数位数= 2,最大位数= 10000)     总计= models.DecimalField(默认值= 00,十进制位置= 2,最大位数= 10000)     amount_paid = models.DecimalField(decimal_places = 2,max_digits = 10000)     date_cust = models.DateTimeField(默认= datetime.now(),空白=真)     #objects = UserManager()

def __str__(self):
    return str(self.id)

def get_pdf_bill(self):
    return reverse("bill_pdf", kwargs={"id": self.id})

def m2m_changed_cust_receiver(发送方,实例,操作,* arg,** kwargs):     打印(动作)     如果操作=='post_add'或'post_remove'或'post_clear':         产品= instance.particular.all()         总计= 0     对于x in产品:         总计+ = x.rate     如果instance.subtotal!=总计:         instance.subtotal =总数

    instance.save()

m2m_changed.connect(m2m_changed_cust_receiver,sender = Customer1.particular.through)

def pre_save_cust_receiver(发件人,实例,* args,** kwargs):     instance.total = instance.subtotal

pre_save.connect(pre_save_cust_receiver,sender = Customer1)

}

0 个答案:

没有答案