1

私の問題に対する確かな答えを見つけることができませんでした。ビューにフォームを事前入力しようとしています。したがって、ユーザーがフォームを操作するとき、一部のデータはすでに処理されています。私がやろうとしているのは、ユーザーのユーザー名と彼のグループを自動的に取得し、それをデータベースにフィードすることです。しかし、それをしようとすると、IntegrityError NOT NULL 制約が失敗しました。

私はこれが初めてで、MDN Web ドキュメントから学んでいます。

私のviews.py:

class AddNewView(generic.View):
    formClass = AddNewForm
    template_name = 'myapp/subscription_form.html'

    def get(self, request):
        form = self.formClass(None)
        return render(request, self.template_name, {'form': form})

    def post(self, request):

        form = self.formClass(request.POST)

        if form.is_valid():
            subscription = form.save(commit=False)

            organization = request.user.groups.values_list('id', flat=True).first()
            input_user = self.request.user
            stuff = form.cleaned_data['stuff']
            description = form.cleaned_data['description']

            subscription.save()

        return render(request, self.template_name, {'form': form})

フォーム.py:

class AddNewForm(forms.ModelForm):
    def __init__(self, *args,**kwargs):
        super (AddNewView, self ).__init__(*args,**kwargs) 

    class Meta:
        model = Subscription
        fields = [
            'stuff',
            'description',
        ]

models.py:

class Subscription(models.Model):
    organization = models.ForeignKey(Group, help_text="which organization")
    input_user = models.CharField(max_length=150)
    input_date = models.DateTimeField(auto_now_add=True)
    description = models.CharField(max_length=1000, null=True, blank=True, help_text='Description')
    stuff = models.CharField(max_length=100)

html:

{% extends "base_generic.html" %}

{% block content %}

<form action="" method="post">
    {% csrf_token %}
    <table>
    {{ form.as_table }}
    </table>
    <input type="submit" value="Submit" />

</form>
{% endblock %}

私が得るエラーは次のとおりです: 例外タイプ: IntegrityError 例外値:
NOT NULL 制約が失敗しました: myapp_myapp.organization_id

あなたが提供できる助けに感謝します

4

2 に答える 2

0

あなたのフォームでは、

class AddNewForm(forms.ModelForm):

    class Meta:
        model = Subscription
        fields = [
            'description',
            ]

このようにビューを編集してみてください。

if form.is_valid():
        subscription = form.save(commit=False)

        subscription.organization = request.user.groups.first()
        subscription.input_user = self.request.user.username

        subscription.save()

stuffモデルのフィールドではないため(少なくとも投稿したフィールドではないため)、フィールドオプションに含めた理由がよくわかりませんでした。

于 2017-07-31T15:18:46.423 に答える