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)。

我不太确定你为什么想要那个。但更重要的是,你为什么用 filtervalues_list 来做?您需要获取值并存储它。

detail = form.save(commit=False)
detail.currency = form.cleaned_data['base_rate'].currency
detail.save()