我正在尝试为外键自动分配值,以便模型自动与另一个模型关联。这是在表单创建条目时完成的。我收到以下错误
ValueError at /nodiso/createaction/23/
Cannot assign "'23'": "LeadActions.lead" must be a "Leads" instance.
这是两个模型:
class Leads(models.Model):
company = models.ManyToManyField(Company)
user = models.ManyToManyField(settings.AUTH_USER_MODEL)
name = models.CharField(max_length=265)
email = models.EmailField(max_length=265)
tel = models.IntegerField()
dateenq = models.DateField(auto_now_add=True,null=True)
def get_absolute_url(self):
return reverse('nodisoapp:leadlist')
def __str__(self):
return self.name
class LeadActions(models.Model):
lead = models.ForeignKey(Leads)
name = models.CharField(max_length=265)
crdate = models.DateField(auto_now_add=True)
Duedate = models.DateField()
creator = models.CharField(max_length=265)
overdue = models.IntegerField(null=True,blank=True)
def get_absolute_url(self):
return reverse('nodisoapp:leadlist')
def __str__(self):
return self.name
这是视图
class ActionCreateView(LoginRequiredMixin, generic.CreateView):
login_url = '/scrty/login/'
template_name = "nodiso/actioncreate.html"
form_class = forms.LeadActionCreateForm
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.lead = self.kwargs['pk']
self.object.creator = self.request.user
self.object.save()
return super(LeadCreateView, self).form_valid(form)
这是模型表格
class LeadActionCreateForm(forms.ModelForm):
class Meta:
model = models.LeadActions
fields = ['name','Duedate']
我很感激帮助。
答案 0 :(得分:2)
而不是
self.object.lead = self.kwargs['pk']
尝试做
lead_id = int(self.kwargs['pk'])
self.object.lead = Lead.objects.get(pk=lead_id)
使用字段名称在Django中分配关系字段时,必须传递模型实例而不是主键。您还可以通过执行以下操作来使用主键:
lead_id = int(self.kwargs['pk'])
self.object.lead_id = lead_id
答案 1 :(得分:1)
试试这个:
self.object.lead_id = self.kwargs['pk']
由于您直接使用键值,因此需要使用'_id'引用变量。
另一种方式是:
self.object.lead_id = Lead.objects.get(pk=self.kwargs['pk'])
在这种情况下不需要,因为你有密钥值。
答案 2 :(得分:1)
这里有两个问题。
一,如果您拥有相关实例的PK而不是实例对象,则需要使用lead_id
字段名称。
其中两个,与URI regexp匹配的kwargs是字符串,而PK值是整数。假设您的uris regexp具有适当的限制性,您可以使用int
进行转换。所以结合两者:
self.object.lead = int(self.kwargs['pk'])