Django ModelForm Foreign Key Dropdown 传递 __str__ 但存储 fkey_id
Django ModelForm Foreign Key Dropdown passes __str__ but stores fkey_id
有两个模型,我想将列字段从一个模型存储到另一个模型。
models.py:
class Company(models.Model):
name = ...
def __str__(self):
return self.name
class Rate(models.Model):
company = models.ForeignKey(Company)
currency = ...
name = ...
def __str__(self):
return self.name + " " + self.currency
class Client(models.Model):
name = ...
currency = ....
company = models.ForeignKey(Company)
base_rate = models.ForeignKey(Rate)
def __str__(self):
return self.name
forms.py:
class ClientForm(forms.ModelForm):
class Meta:
model = Client
fields = (
"name",
"company",
"base_rate", )
views.py:
class ClientCreateView(FormView):
template_name = "client/new_package.html"
form_class = ClientForm
success_url = reverse_lazy("home")
def form_valid(self, form):
detail = form.save(commit=False)
base_rate_id = form.cleaned_data['base_rate']
detail.currency = Rate.objects.values_list("currency", flat=True).filter(base_rate_id=base_rate_id)
detail.save()
if detail is not None:
return redirect('display_package' , detail.id)
else:
return super(ClientCreateView, self).form_valid(form)
基本上,我希望从 Rate 模型中选择的货币值保存在我的客户端模型中。任何帮助将不胜感激,因为我从清理后的数据中得到 str 返回值而不是选定的选项 ID 值(即来自客户端模型的 str)。
我不太确定你为什么想要那个。但更重要的是,你为什么用 filter
和 values_list
来做?您需要获取值并存储它。
detail = form.save(commit=False)
detail.currency = form.cleaned_data['base_rate'].currency
detail.save()
有两个模型,我想将列字段从一个模型存储到另一个模型。
models.py:
class Company(models.Model):
name = ...
def __str__(self):
return self.name
class Rate(models.Model):
company = models.ForeignKey(Company)
currency = ...
name = ...
def __str__(self):
return self.name + " " + self.currency
class Client(models.Model):
name = ...
currency = ....
company = models.ForeignKey(Company)
base_rate = models.ForeignKey(Rate)
def __str__(self):
return self.name
forms.py:
class ClientForm(forms.ModelForm):
class Meta:
model = Client
fields = (
"name",
"company",
"base_rate", )
views.py:
class ClientCreateView(FormView):
template_name = "client/new_package.html"
form_class = ClientForm
success_url = reverse_lazy("home")
def form_valid(self, form):
detail = form.save(commit=False)
base_rate_id = form.cleaned_data['base_rate']
detail.currency = Rate.objects.values_list("currency", flat=True).filter(base_rate_id=base_rate_id)
detail.save()
if detail is not None:
return redirect('display_package' , detail.id)
else:
return super(ClientCreateView, self).form_valid(form)
基本上,我希望从 Rate 模型中选择的货币值保存在我的客户端模型中。任何帮助将不胜感激,因为我从清理后的数据中得到 str 返回值而不是选定的选项 ID 值(即来自客户端模型的 str)。
我不太确定你为什么想要那个。但更重要的是,你为什么用 filter
和 values_list
来做?您需要获取值并存储它。
detail = form.save(commit=False)
detail.currency = form.cleaned_data['base_rate'].currency
detail.save()