私はdjangoが初めてで、別のクラスでユーザーモデルを拡張したいと思います。しかし、クラスDeviceで正しく動作するようにフォームを取得する方法がわかりません。私は温度と電池がその形で現れるようにします。 ビューでのdjango形式のレンダリング
:)事前にどうもありがとうございましmodels.pyclass Device(models.Model):
temperature = models.IntegerField()
battery = models.IntegerField()
class UserProfile(models.Model):
user = models.OneToOneField(User)
deviceNb= models.CharField(max_length=50)
device = models.OneToOneField(Device, null=True)
User.profile = property(lambda u : UserProfile.objects.get_or_create(user=u)[0])
forms.py
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ('deviceNb', 'device',)
views.py
def user_profile(request):
if request.method == 'POST':
form = UserProfileForm(request.POST, instance=request.user.profile)
if form.is_valid:
form.save()
#to go back to check that the info has changed
return HttpResponseRedirect('/accounts/loggedin')
else: # when this is a get request
user = request.user
profile = user.profile
form = UserProfileForm(instance=profile)
args = {}
args.update(csrf(request))
args['form'] = form
return render(request, 'profile.html', args)
インラインフォームセットが答えです。ドキュメントから:https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#inline-formsets – ivan7707
これは 'if if form.is_valid()'であることに注意してください。括弧を忘れて 'if form.is_valid'と書くと、' form.is_valid'は*常に* Trueと評価されます。 – Alasdair
チップのおかげで!本当に変化を起こすでしょう。 :) – Rose