4

ファイル: 容量/models.py

class Env(models.Model):
    name = models.CharField(max_length=50)
    def get_absolute_url(self):
            return reverse('index')

class Envhosts(models.Model):
    env =  models.ForeignKey(Env)
    hostname = models.CharField(max_length=50)
    count = models.IntegerField()

    class Meta:
        unique_together = ("env","hostname")

    def get_absolute_url(self):
        return reverse('index')

ファイル: Capacity/views.py

 class EnvhostsCreate(CreateView):
    model = Capacity.models.Envhosts
    fields=['env','hostname','count']
    template_name_suffix = '_create_form'

ファイル容量/urls.py:

urlpatterns = patterns(........ url(r'^createhosts/(?P<envid>\d+)/$',EnvhostsCreate.as_view(),name='envhosts_create'))

だから今、私がこのフォームを開くと: /Capacity/createhosts/3/(3は私のenv idです)Envのオブジェクトの数に基づいてドロップダウンリストとしてenvオブジェクトのオプションを示しています。しかし、env id (この場合は「3」) に基づいて、env を独自に取得したい

クラス EnvhostsCreate(CreateView) のいくつかのメソッドをオーバーライドする必要があることはわかっています。しかし、後の部分に基づいて環境を取得する方法と方法を理解できません/createhosts/

4

1 に答える 1

4

request.user を追加するためのドキュメントで説明されているパターンを使用できます。これは同じ原則です。envフィールド リストから削除し、次を定義しform_valid()ます。

class EnvhostsCreate(CreateView):
    model = Capacity.models.Envhosts
    fields = ['hostname', 'count']
    template_name_suffix = '_create_form'

    def form_valid(self, form):
        form.instance.env = Envhosts.objects.get(pk=self.kwargs['envid'])
        return super(EnvhostsCreate, self).form_valid(form)
于 2013-12-06T10:16:06.653 に答える