django DB 객체를 참조하는 특성을 가진 모델 클래스가 있습니다. 이 속성을 변경하려면이 속성의 속성을 변경하는 setattr()을 사용하십시오.setattr()을 사용하여 객체 인스턴스 업데이트
문제는 스택을 통해 개체 인스턴스를 전달할 수없는 것입니다. 나는 setattr()을 사용할 수 있는지 잘 모르겠다. 사실 문제가 setattr()이나 다른 것을 시도한 것과 관련이 있는지 확실하지 않습니다. 알려주세요! POST 시도에
오류 :
ValueError at /dollhouseupdate/1
Cannot assign "u'Citadel'": "Dollhouse.dh_background" must be a "Background" instance.
모델 :
class Dollhouse(models.Model):
dollhouse_name = models.CharField(max_length=100)
user = models.ForeignKey(User)
dh_background = models.ForeignKey(Background)
def __str__(self):
return self.dollhouse_name
템플릿 :
<select id="background-select">
<option value="null">Change Background</option>
{% for background in background_objects %}
<option value="{{ background }}">{{ background.bg_name }} </option>
{% endfor %}
</select>
보기 :
def dollhouseupdate(request, dollhouseid):
if request.method == 'POST':
workingdollhouse = Dollhouse.objects.get(id=dollhouseid)
if request.POST.get('erase') == "true":
workingdollhouse.delete()
return HttpResponse("Dollhouse deleted!")
else:
data = (request.POST).dict()
for key, value in data.items():
setattr(workingdollhouse, key, value)
workingdollhouse.save()
return HttpResponse("Dollhouse {} saved!".format(workingdollhouse.dollhouse_name))
,
자바 스크립트 : 당신은 POST
변수에 개체 ID를 전달하는
//change dollhouse background
$("#background-select").change(function() {
if($("#background-select").val() != null) {
var dollhouseid = workingDollhouse;
var dh_background = $("#background-select").val()
console.log("changing background to " + dh_background);
$.ajax("http://127.0.0.1:8000/dollhouseupdate/"+dollhouseid, {
type: 'POST',
data: {
dh_background: dh_background,
}
})
.done(function(response){
console.log("The request is complete!");
console.log(response);
window.location = "http://127.0.0.1:8000/";
})
.fail(function() {
console.log("Sorry, there was a problem!");
})
};
});
감사합니다. 이것은 가장 간단한 대답이며 모든 속성에 setattr()을 사용합니다. 이전에 "dh_background_id"대신 "dh_background.id"를 사용하여이 작업을 시도했지만 제대로 업데이트되지 않았습니다. – Catma