创建非形式的模型实例并将其添加到其他实例

2024-04-27 15:42:42 发布

您现在位置:Python中文网/ 问答频道 /正文

在mymodels.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时,我当然需要一个表单。这在my forms.py中定义:

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

我的问题:

BusFormsave()方法中,我必须创建一个File实例,并将其添加到Bus实例(file字段)

我花了好几个小时试图做到这一点。然而,我不明白。如果有人能帮我看看save()方法的样子,那就太好了


Tags: py模型falsemodelmodelsformslengthmax
1条回答
网友
1楼 · 发布于 2024-04-27 15:42:42

您可以像这样创建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

相关问题 更多 >