Django-如何保存()ModelForm';s

Django-如何保存()ModelForm';s,django,django-forms,Django,Django Forms,我正在尝试保存一个模型表单,但遇到一个错误: InternalError at /submeter/anuncio/ current transaction is aborted, commands ignored until end of transaction block 我会尽力解释我在做什么 好的,我有5个模型需要一次保存在一个表单中。我正在测试在两个模型上保存,但正如我所说的,我在保存方法上遇到了错误。作为一个初学者,我对完成任务的最佳方法有点迷茫 我所做的: 模板: <for

我正在尝试保存一个模型表单,但遇到一个错误:

InternalError at /submeter/anuncio/
current transaction is aborted, commands ignored until end of transaction block
我会尽力解释我在做什么

好的,我有5个模型需要一次保存在一个表单中。我正在测试在两个模型上保存,但正如我所说的,我在保存方法上遇到了错误。作为一个初学者,我对完成任务的最佳方法有点迷茫

我所做的:

模板:

<form method="post" action="/submeter/anuncio/">{% csrf_token %}
    {{form_main}}
    {{form_bicyclead}}
    <input type="hidden" name="section" value="5" />
    <input type="submit">
</form>
Forms.py:

class MainForm(forms.ModelForm):
    class Meta:
    model = Main
    exclude = ('user', 'section')

class BicycleAdForm(forms.ModelForm):
    class Meta:
    model = BicycleAd
    exclude = ('main', 'bicycleadtype', 'bicycleaditemkind', 'bicycleadcondition', 'city')
Models.py:

class Main(models.Model):
    section             = models.ForeignKey(Section)
    user                = models.ForeignKey(User)
    title               = models.CharField(max_length=250)
    date_inserted       = models.DateTimeField(auto_now_add=True)
    date_last_update    = models.DateTimeField(auto_now=True)

    def __unicode__(self):
    return self.title

    class Meta:
    ordering = ['date_inserted']

class BicycleAd(models.Model):
    main                = models.ForeignKey(Main)
    bicycleadtype       = models.ForeignKey(BicycleAdType)
    bicycleaditemkind   = models.ForeignKey(BicycleAdItemKind) # MPTT Model
    bicycleadcondition  = models.ForeignKey(BicycleAdCondition)
    country             = models.ForeignKey(GeonamesCountry)       
    city                = models.ForeignKey(GeonamesLocal) 
    date_inserted       = models.DateTimeField(auto_now_add=True)
    date_last_update    = models.DateTimeField(auto_now=True)

    class Meta:
    ordering = ['date_inserted']  
我的问题是:如何“覆盖”views.py中的表单_main.save(),并告诉他们我在模型“section,user和title”中的所有字段?我认为错误是因为字段“section”和“user”没有传递到save方法。如何传递此值

另一个问题:我是以正确的方式做这件事的,还是有更简单更简单的方式来实现我想要实现的目标


向您致意

将您的模型表格修改为:

class MainForm(forms.ModelForm):
    def __init__(self, *args, **kw):
        self.user = kw.pop('user')
        self.section = kw.pop('section')
        super(MainForm).__init__(*args, **kw)

    class Meta:
        model = Main
        exclude = ('user', 'section')

    def save(self, *args, **kw):
        instance = super(MainForm).save(commit=False)
        instance.user = self.user
        instance.section = self.section
        instance.save()
        return instance
现在,当您在视图中创建表单的外观时,需要传递
用户
部分

form_main = MainForm(request.POST or None, user=request.user, section=section)

将模型表单修改为:

class MainForm(forms.ModelForm):
    def __init__(self, *args, **kw):
        self.user = kw.pop('user')
        self.section = kw.pop('section')
        super(MainForm).__init__(*args, **kw)

    class Meta:
        model = Main
        exclude = ('user', 'section')

    def save(self, *args, **kw):
        instance = super(MainForm).save(commit=False)
        instance.user = self.user
        instance.section = self.section
        instance.save()
        return instance
现在,当您在视图中创建表单的外观时,需要传递
用户
部分

form_main = MainForm(request.POST or None, user=request.user, section=section)

我的方法是替换此代码:

def submit_ad_view(request):
    if request.method == 'POST':
        post_values = request.POST.copy()

        post_values['user'] = request.user.username

        post_values['bicycleadtype']      = 2
        post_values['bicycleaditemkind']  = 4
        post_values['bicycleadcondition'] = 2
        post_values['city']               = 4803854  

        form_main      = MainForm(post_values)
作者:


您可以在django doc上了解更多信息。

我的方法是替换此代码:

def submit_ad_view(request):
    if request.method == 'POST':
        post_values = request.POST.copy()

        post_values['user'] = request.user.username

        post_values['bicycleadtype']      = 2
        post_values['bicycleaditemkind']  = 4
        post_values['bicycleadcondition'] = 2
        post_values['city']               = 4803854  

        form_main      = MainForm(post_values)
作者:


您可以在django doc上了解更多信息。

我想您的意思是
self.section=kw.pop('section')
谢谢您的回答。我想你是说
self.section=kw.pop('section')
谢谢你的回答。它也能完成这项工作。