如何获取URL上的Foreign Key并在django CreateView上使用它

fsi0uk1n  于 2023-05-30  发布在  Go
关注(0)|答案(1)|浏览(102)

谢谢你的时间...
如果有人可以帮助我获取URL上显示的外键并在Django CreateView上使用它。
我正在尝试创建一个简单的应用程序来组织立法。为此,我在数据库中有这样的关系:分类有很多系列,系列有很多文章。
我已经把urls.py的一个路径做成这样了

(...)
path('nova-serie/<categoria>', NovaSerie.as_view(), name='nova_serie'), 
(...)

我只想传递从URL中获取值并保存为外键而无需用户再次输入。

view.py

class NovaCategoria(CreateView):
    model = Categoria
    form_class = CategoriaForm
    template_name = 'nova_categoria.html'
    success_url = reverse_lazy('home')

class NovaSerie(CreateView):
    model = Serie
    form_class = SerieForm
    template_name = 'nova_serie.html'
    success_url = reverse_lazy('home')

models.py

class Categoria(models.Model):
    categoria = models.CharField(
        max_length=200, verbose_name="Nome da categoria", help_text="colocar aqui o texto de ajuda")
   
    class Meta:
        verbose_name_plural = "Categorias"
        verbose_name = "categoria"

    def __str__(self):
        return self.categoria

class Serie(models.Model):
    serie = models.CharField(
        max_length=200, verbose_name="Série", help_text="colocar aqui o texto de ajuda")
    categoria = models.ForeignKey(Categoria, default=1, on_delete=models.SET_DEFAULT)
    
    class Meta:
        verbose_name_plural = "serie"

    def __str__(self):
        return self.serie

forms.py

class SerieForm(forms.ModelForm):
    class Meta:
        model = Serie
        fields = (
            'serie',
            'categoria',
        )
        widgets = {
            'title': forms.TextInput(),  # attrs={class="title"}
            'categoria': forms.TextInput(attrs={'class': "green", 'value': object }),  # attrs={class="title"}
        }

class CategoriaForm(forms.ModelForm):
    class Meta:
        model = Categoria
        fields = (
            'categoria',
        )
        widgets = {
            'title': forms.TextInput(),  # attrs={class="title"}
        }

如果你发现这篇文章有任何问题,请让我知道。我很乐意改变它。
谢谢。

pvabu6sv

pvabu6sv1#

要做到这一点,我们基本上需要做两件事:
1.在url.py上,我们需要告诉Django它是一个整数
1.在views.py上使用form_valid

url.py

所以你的urls.py应该有这样的内容:

path('nova-serie/<int:categoria>', NovaSerie.as_view(), name='nova_serie'),

views.py

class NovaSerie(CreateView):
    model = Serie
    form_class = SerieForm
    template_name = 'nova_serie.html'
    success_url = reverse_lazy('home')

    def form_valid(self, form):
        form.instance.categoria_id = self.kwargs['categoria']
        return super().form_valid(form)

有了这些改变,我才能让它发生!
我是一个新手,如果我应该编辑或删除这个帖子,请让我知道
解决方案是由先生。**威廉·货车·昂塞姆酒店

相关问题