如何使用我的第一个模型对象的ID在我的第二个模型中自动保存Foreignkey值?

时间:2018-11-25 11:16:54

标签: python django python-3.x django-models django-admin

我有两个模型。 Appname和Adspace,我在第二个模型中有一个Foreignkey对象,该对象连接到我的第一个模型。这是代码

models.py

 class Appname(models.Model):
      name=models.CharField(max_length=150,blank=False,null=False,help_text='Add your new App')

      def __str__(self):
          return self.name

      def get_absolute_url(self):
          return reverse("dashapp:space",kwargs={'pk':self.pk})


class Adspace(models.Model):
      ad_space=models.CharField(max_length=150,blank=False,null=False) 
      app=models.ForeignKey('Appname', related_name='appnames',default=None, on_delete=models.CASCADE)
      PID_TYPE = (
    ('FN','FORMAT_NATIVE'),
    ('FNB','FORMAT_NATIVE_BANNER'),
    ('FI','FORMAT_INTERSTITIAL'),
    ('FB','FORMAT_BANNER'),
    ('FMR','FORMAT_MEDIUM,RECT'),
    ('FRV','FORMAT_REWARDED_VIDEO'),
)
     format_type=models.CharField(max_length=3,choices=PID_TYPE,default='FN',blank=False, null=False)

     def __str__(self):
          return self.ad_space

     def get_absolute_url(self):
          return reverse("dashapp:view")

modelForm

class AdspaceForm(forms.ModelForm):
    class Meta:
       model=Adspace
       fields=('ad_space',)

Views.py

class space(LoginRequiredMixin,CreateView):

       form_class=forms.AdspaceForm
       model=Adspace

现在我无法填写我的表单,因为它说app_id不能为null,并且允许用户输入。我希望被点击的应用程序在URL中有其ID(因为我正在通过它)。 我该怎么办,它会自动传递与URL中传递的ID相同的ID号。

1 个答案:

答案 0 :(得分:0)

在视图中定义form_valid并将其设置在那里。

def form_valid(self, form):
    form.instance.app_id = self.kwargs["app_id"]
    return super().form_valid(form)