Эта проблема похожа на эти a и b , но немного отличается.Я новичок в Джанго, поэтому, пожалуйста, потерпите меня.Ниже представлены мои модели
class Project(UniqueIdentifier):
status = models.CharField(max_length=2)
class User(UniqueIdentifier):
first_name = models.CharField(max_length=50,blank=False,null=False)
last_name = models.CharField(max_length=50,blank=False,null=False)
email_address = models.EmailField(max_length=200)
user_state = models.BooleanField()
class Meta:
abstract = True
class Employee(User):
experience = models.DecimalField(max_digits=4, decimal_places=2)
userType = models.CharField(max_length=2,choices=USER_TYPES)
class Team(UniqueIdentifier):
role = models.CharField(max_length=2)
members = models.ManyToManyField(Employee, through="TeamMember")
belongsTo = models.ForeignKey(Project, related_name="team")
class TeamMember(UniqueIdentifier):
team = models.ForeignKey(Team)
members = models.ForeignKey(Employee)
и класс моего общего вида
class ProjectView(UpdateView):
model = Project
fset = inlineformset_factory(Project,Team,form=TeamForm,can_delete=False,fk_name="belongsTo",extra=0)
def get_object(self, *args, **kwargs):
c = get_object_or_404(Project, unique_id = self.kwargs.get('cid'))
df = ProjectForm(instance=c)
.......
return c
def get_context_data(self, *args, **kwargs):
context = super(ProjectUpdateView, self).get_context_data(*args, **kwargs)
..........
return context
def form_valid(self,form,*args, **kwargs):
c = get_object_or_404(Project, unique_id = self.kwargs.get('cid'))
if self.request.method == "POST":
df = ProjectForm(self.request.POST, instance = c)
if df.is_valid():
c = df.save()
fs = self.fset(self.request.POST,instance=c)
if fs.is_valid():
k=fs.save()
, и я получаю эту ошибку.
Cannot set values on a ManyToManyField which specifies an intermediary model.
Пожалуйста, предложите, если у кого-то есть альтернативное решение (я действительно не хочу проливать логику в отдельную форму).Спасибо за помощь, спасибо!
** Обновлено: найдено солутон здесь .Вот мое решение,
Class ProjectView(CreateView):
.........
def form_valid():
.........
if fs.is_valid():
k=fs.save(commit=False)
for h in k:
h.save()
for x in range(0,len(k)):
for y in self.request.POST.getlist('team-'+str(x)+'-members'):
p=TeamMember(team=k[x],members=get_object_or_404(Employee,unique_id=y))
p.save()
Спасибо большое!