在我的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
方法的样子,那就太好了!
答案 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