从Form创建模型实例并将其添加到其他实例

时间:2018-03-10 16:05:50

标签: python django

在我的models.py中,我有一个名为Bus的模型。它包含多个字段,包括下面的字段file

class Bus(models.Model):
    file = models.OneToOneField('File', on_delete=models.PROTECT, editable=False)

File模型包含:

class File(models.Model):
    file = models.FileField(
        upload_to=get_filepath,
        max_length=45,
        validators=[
            FileExtensionValidator(allowed_extensions=['pdf', 'jpg', 'png']),
            file_size,
        ]
    )
    original_name = models.CharField(max_length=45)
    extension = models.CharField(max_length=3)

如果你想创建一个新的Bus,我当然需要一个表格。这是在我的forms.py中定义的:

class BusForm(forms.ModelForm):
    upload = forms.FileField(max_length=45, required=False,
                            validators=[
                                FileExtensionValidator(allowed_extensions=['pdf', 'jpg', 'png']),
                                file_size,
                            ],)

我的问题:

save()的{​​{1}}方法中,我必须创建一个BusForm实例并将其添加到File实例(Bus字段)。

多个小时,我试图实现这一目标。但是,我不明白。如果有人可以尝试帮助我file方法的样子,那就太好了!

1 个答案:

答案 0 :(得分:0)

您可以像这样创建save方法

def save(self, commit=False):
    # This will create bus_instance but not save in database
    bus_instance = super(self, BusForm).save(commit=False) 

    # create file instance
    file_instance = File.objects.create() # add the required parameters

    # Assign file_instance to file attribute of bus_instance
    bus_instance.file = file_instance

    # Save to database only if user calling save method wants to save in database
    if commit:
        bus_instance.save()

    return bus_instance