Django inline formset одно и то же значение повторяется
Я хочу установить цель сотрудника для каждого продукта, он показывает все продукты, но только один продукт сохраняется каждый раз, я хочу, чтобы все продукты имели разные цели В моем Views.py
class targetcreate(CreateView):
model = target
form_class = targetform1
success_url = '/'
def get_context_data(self,** kwargs):
context = super(targetcreate, self).get_context_data(**kwargs)
context['formset'] = targetFormset(queryset=target.objects.none(), instance=product.objects.get(id=1),initial=[{'name': name} for name in self.get_initial()['name']])
return context
def get_initial(self):
initial = super(targetcreate , self).get_initial()
initial['name'] = product.objects.all()
# initial['name'] = add_users.objects.all()
return initial
def post(self, request, *args, **kwargs):
formset = targetFormset(request.POST,queryset=target.objects.none(), instance=product.objects.get(id=1), initial=[{'name': name} for name in self.get_initial()['name']])
if formset.is_valid():
return self.form_valid(formset,request)
else:
messages.warning(request,'error')
return render(request,'add_target_emp1.html',{'formset':formset})
def form_valid(self,formset,request):
instances = formset.save(commit=False)
for instance in instances:
instance.date = request.POST.get('date')
instance.name = emp.objects.get(id=3).user.username
instance.save()
return redirect('../../accounts/add_target_emp1')
в моем models.py это моя модель сотрудника, у меня есть продукт в другом приложении
class emp(models.Model):
user=models.OneToOneField(User,null=True,on_delete=models.CASCADE)
firstname=models.CharField(default='',max_length=100,null=False)
lastname=models.CharField(default='',max_length=100,null=False)
gender=(
('M','Male'),
('F','Female'),
('O','Others'),
)
gender=models.CharField(choices=gender, default='',max_length=10)
dob=models.DateField(default=datetime.now)
created_by=models.CharField(default='',max_length=100)
phonenumber=models.TextField(default='',null=False,unique=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(default=timezone.now)
branch=models.CharField(default='',max_length=100)
position=models.CharField(default='',max_length=100)
class target(models.Model):
conversion_target=models.BigIntegerField(null=True)
total_target=models.BigIntegerField(null=True)
name=models.CharField(default='',max_length=100)
branch=models.CharField(default='',max_length=100)
created_at = models.DateTimeField(auto_now_add=True)
created_by=models.CharField(default='',max_length=100)
month=models.CharField(default='',max_length=100)
vehicle=models.ForeignKey(product,on_delete=models.CASCADE,null=True)
class product(models.Model):
product_category=models.CharField(null=True,max_length=5000)
product_category_id=models.CharField(null=True,max_length=5000)
Value=models.DecimalField(default=0.00,max_digits=10,decimal_places=2)
products=models.CharField(null=True,max_length=5000)
forms.py
class targetform1(ModelForm):
class Meta:
model = target
fields ='__all__'
widgets = {'name' : HiddenInput}
exclude=['created_at','created_by','completed_total_target','completed_conversion_target','completed_total_percentage','completed_conversion_percentage','branch']
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
for field in self.fields:
new_data={
'class':'form-control',
'rows':1,
'required':'True',
}
self.fields[str(field)].widget.attrs.update(
new_data
)
var=product.objects.all().count()
targetFormset = inlineformset_factory(product,target,form=targetform1,fields=('name','vehicle','conversion_target','total_target'),extra=var)
Это моя форма ввода pdt1 только сохранение каждый раз, я хочу, чтобы все продукты были вырезаны и сохранены
