如何从表格Django中保存外来关系

时间:2018-01-16 12:32:35

标签: python django post foreign-keys

...我试图用2种不同模型保存2个表格保存的数据,但我不知道如何保存关系。保存数据后,我需要将它们显示为一个html表单,当用户键入信息时也是一个html表单。

有了这个观点,我在两个模型中保存了信息,但是我无法保存关系。 可能是POST有一个不同的工作在这个问题....我不知道

  

view.py

def proposeActivity(request):
if request.method == "POST":
    form_1 = ActivityProposedForm(request.POST, prefix="form_1")
    form_2 = ActivityUrl_activity(request.POST, prefix="form_2")
    if form_1.is_valid() and form_2.is_valid():
        post_1 = form_1.save(commit=False)
        post_2 = form_2.save(commit=False)
        post_1.author = request.user
        post_2.author = request.user
        post_1.save()
        post_2.save()
        return redirect('proposedActivities')
else:
    form_1 = ActivityProposedForm(prefix="form_1")
    form_2 = ActivityUrl_activity(prefix="form_2")

return render(request, 'registerActivity.html', {'form_1': form_1, 'form_2': form_2})
  

forms.py

class ActivityProposedForm(forms.ModelForm):

class Meta:
        metodologias_choices = [(metodologia.id, metodologia.methodology_name) for metodologia in Methodology.objects.all()]
        normas_choices = [(normas.id, normas.norm_name) for normas in Norm.objects.all()]
        # competencias_choices = 
        # CHOICES = {('1', 'Activa'), ('2', 'Tradicional')}
        model = ActivityProposed

        fields = [
            'nombre_actividad', 'detalle_de_la_actividad', 'metodologia', 
            'nombre_de_la_norma', 'nombre_de_la_competencia', 
            'nombre_del_curso']

        labels = {
            'nombre_actividad': 'Nombre de la Actividad',
            'detalle_de_la_actividad': 'Detalla de la Actividad',
            'metodologia': 'Metodologia',
            'nombre_de_la_norma': 'Nombre de la Norma',
            'nombre_de_la_competencia': 'Nombre de la Competencia',
            'nombre_del_curso': 'Nombre del Curso'
        }

        widgets = {
            'nombre_actividad': forms.TextInput(attrs={'class': 'form-control'}),
            'detalle_de_la_actividad': forms.Textarea(attrs={'class': 'form-control', 'rows': '3'}),
            'metodologia': forms.Select(attrs={'class': 'select'}, choices=metodologias_choices),
            'nombre_de_la_norma': forms.Select(attrs={'class': 'select'}, choices=normas_choices),
            'nombre_de_la_competencia': forms.TextInput(attrs={'class': 'form-control'}),
            'nombre_del_curso': forms.TextInput(attrs={'class': 'form-control'}),
        }



class ActivityUrl_activity(forms.ModelForm):
class Meta:
    model = Url_activity
    fields = (
        'url_de_la_actividad', 'nombre_url')

    labels = {
        'url_de_la_actividad': 'URL de la Actividad',
        'nombre_url': 'Nombre del Boton a la URL'
    }

    widgets = {
        'url_de_la_actividad': forms.URLInput(),
        'nombre_url': forms.TextInput(attrs={'class': 'form-control'})
    }
  

models.py

class Url_activity (models.Model):
    url_de_la_actividad = models.URLField()
    nombre_url = models.CharField(max_length=10, null=True)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False, null=True)
    lastModification = models.DateTimeField(auto_now_add=False, auto_now=True, null=True)
    def __unicode__(self):
        return self.url_de_la_actividad


class ActivityProposed (models.Model):
    nombre_actividad = models.CharField(max_length=50)
    detalle_de_la_actividad = models.TextField()
    metodologia = models.CharField(max_length=50)
    foreign_url = models.ForeignKey(Url_activity, on_delete=models.CASCADE, null=True, blank=True)
    nombre_de_la_norma = models.CharField(max_length=50)
    nombre_de_la_competencia = models.CharField(max_length=100)
    nombre_del_curso = models.CharField(max_length=50)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False, null=True)
    lastModification = models.DateTimeField(auto_now_add=False, auto_now=True, null=True)
    foreing_activity = models.ForeignKey(Activity, on_delete=models.CASCADE, null=True, blank=True)
    def __unicode__(self):
        return self.nombre_actividad

谢谢大家!!

1 个答案:

答案 0 :(得分:0)

然后解决方案是......

views.py

            post_2 = form_2.save(commit=False)  
            post_1 = form_1.save(commit=False)

            post_2.author = request.user
            post_1.author = request.user

            post_2.save()
            post_1.foreign_url = post_2
            post_1.save()