繁体   English   中英

基于另一个模型的实例自动创建模型的实例

[英]Create instance of a model automatically based on instance of another model

我想在创建汽车模型实例时创建 4 个轮胎实例和 1 个引擎实例这是我的模型代码

class Car(models.Model):
    company=models.CharField(max_length=25)
    car_model = models.CharField(max_length = 25)
    year = models.IntegerField()

class Engine(models.Model):
    car=models.OneToOneField(Car)
    engine_type=models.CharField(max_length = 15)
    no_cylinders=models.IntegerField()
    state=models.CharField(max_length = 15)
class Tyre(models.Model):  
    car=models.ForeignKey(Car)
    tyre_material=models.CharField(max_length = 15)
    position=models.CharField(max_length = 10)  #ex front right back left 
    state=models.CharField(max_length = 15)

和汽车的形式

class car_form(forms.ModelForm):
    
    class Meta:
        model = Car
        fields = (
            'comapany',
            'car_model',
            'year'
            )

    def save(self, commit=True):
        obj=car_form.save()
        obj.company = self.cleaned_data['comapany']
        obj.car_model = self.cleaned_data['car_model']
        obj.year = self.cleaned_data['year']
        
        if commit:
            obj.save()

    return obj

这是我的看法

def car_create(request):
    if request.method =='POST':
        form = car_form(request.POST)
        if form.is_valid():
            form.save()
            return redirect("/")
        else :
            return render(request, 'agency/car_form.html', 
                          {'form': form})
    else:
        form = car_form()

        args = {'form': form}
        return render(request, 'agency/car_form.html', args)

我应该在我的代码中更改什么?

您可以根据父实例创建实例,例如:

Views.py

...
    new_car = form.save()
    engine = Engine.objects.create(car=new_car)
    for i in range(4):
        tyre = Tyre.objects.create(car=new_car)
...

最好的办法是使用信号

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM