簡體   English   中英

在其他表單模型中添加外部模型-Django 1.8

[英]Add Foreign Model in other form model - Django 1.8

當我嘗試以AgregarActividad形式添加異物'linea'時,在Django中出現錯誤

views.py

@login_required(login_url='/')
def agregar_actividad(request, pk):
    linea =  Linea.objects.filter(pk=pk)

    if request.method == "POST":
        form = AgregarActividad(request.POST, linea = linea)
        if form.is_valid():
            actividad = form.save(commit=False)
            actividad.save()
            return redirect('/lineas/lista')
    else:
        form = AgregarLinea()
    return render(request, 'lineas/editar_actividad.html', {'form': form})

表格

class AgregarActividad(forms.ModelForm):

    class Meta:
        model = Actividad
        fields = '__all__'
        exclude = ['updated']

    def __init__(self, *args, **kwargs):
        linea = kwargs.pop('linea')
        print linea
        super(AgregarActividad, self).__init__(*args,**kwargs)
        self.fields['descripcion'].required = True
        self.fields['linea'] = linea

models.py

class Actividad(models.Model):
    class meta:
        verbose_name_plural = "Actividades"

    descripcion =  models.CharField(max_length=75, unique=True)
    linea = models.ForeignKey('Linea')
    updated = models.DateTimeField(auto_now_add=False, auto_now=True, null=True)

    def __str__(self):
        return self.descripcion

agregar_actividad.html

{% extends 'base/base.html' %}
{% load crispy_forms_tags %}

{% block content %}
    <div class="col-sm-6 col-sm-offset-3">
        <h1>Nueva Actividad</h1>
        <form method = "POST" class="post-form">
            {% csrf_token %}
            {{ form|crispy }}
          <input class="btn btn-default" type="submit" value="Submit">   <!-- Boton para subir POSTEAR LOS DATOS -->
        </form>
    </div>
{% endblock %}

引發我的錯誤

AttributeError at /linea/19/actividad/agregar/
'QuerySet' object has no attribute 'widget'
Request Method: POST
Request URL:    http://localhost:8000/linea/19/actividad/agregar/
Django Version: 1.8.5
Exception Type: AttributeError
Exception Value:    
'QuerySet' object has no attribute 'widget'

追溯

/home/daniel/DjangoProjects/Speeducation/Speeducation/apps/lineas/views.py in agregar_actividad
                if form.is_valid(): 

問題是您表格中的這一行

self.fields['linea'] = linea

用這樣的查詢集或對象替換字段是沒有意義的。

而是從表單中排除該字段

class AgregarActividad(forms.ModelForm):

    class Meta:
        model = Actividad
        fields = '__all__'
        exclude = ['updated', 'linea']

在視圖中,保存之前分配對象。 注意,您應該使用get()而不是filter()來獲取單個對象。

linea =  Linea.objects.get(pk=pk)

if request.method == "POST":
    form = AgregarActividad(request.POST, linea = linea)
    if form.is_valid():
        actividad = form.save(commit=False)
        actividad.linea = linea
        actividad.save()
        return redirect('/lineas/lista')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM