私はフォームを作成し、CharFieldとして外部キー 'artist'を設定しました。それが存在しなければ作成されるだろう。アーティストフィールドにデータを入力するとき、私は次のエラーを取得しています:ここでDjango ValueError "testing"を割り当てることができません: "Profile.artist"は "アーティスト"インスタンスでなければなりません
ValueError: Cannot assign "'testing'": "Profile.artist" must be a "Artist" instance
は私のmodels.pyである:ここでは
class Artist (models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Genre (models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Profile (models.Model):
artist = models.ForeignKey(Artist, on_delete=models.CASCADE)
genre = models.ForeignKey(Genre, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
mix = models.CharField(max_length=100, blank=True)
def __str__(self):
return self.title
は私のviews.pyです:
ここdef profile_create(request):
if request.method == 'POST':
form = ProfileForm(request.POST)
if form.is_valid():
instance = form.save(commit=False)
instance.user = request.user
instance.save()
form = ProfileForm(None) #clears the form for new submission
context = {
"form": form,
"instance": instance,
}
return render(request, "profile_form.html", context)
else:
form = ProfileForm(None)
context = {
"form": form,
}
return render(request, "profile_form.html", context)
私のforms.py:
from django import forms
from .models import Profile, Artist
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = [
"artist",
"title",
"mix",
"genre",
]
artist = forms.CharField(widget=forms.TextInput)
def clean_artist(self, commit=True):
artist = self.cleaned_data.get("artist")
if not artist:
raise forms.ValidationError("Artist is a required field.")
else:
artist, created = Artist.objects.get_or_create(name=artist)
self.cleaned_data['artist'] = artist
return super(ProfileForm, self).clean()
あなたは 'clean_artist'メソッドの中でsuper' clean() 'を呼び出すべきではありません。また、そのメソッドは 'commit'パラメータを取ることもありません。 –
'commit = True'パラメータは必要ありません – Sayse