0
단일 사용자와 관련된 Tool
개체와 함께 작동하는 양식을 만들려고합니다.Django ModelForm 기존 데이터베이스 항목을 업데이트하는 대신 새 인스턴스 만들기
class Tool(models.Model):
owner = models.ForeignKey(BaseUser)
tool_type = models.CharField(('tool_type'), max_length=40, blank=True)
description = models.CharField(('description'), max_length=100, blank=True)
available = models.BooleanField()
이 도구는 도구가이보기
@login_required
def tool_register(request):
if request.method == 'POST':
frm = ToolForm(request.POST)
print(request.user)
if frm.is_valid():
frm.save()
return render_to_response('tools/tool_register_success.html')
else:
frm = ToolForm(initial = {'owner':request.user})
args = {}
args.update(csrf(request))
args['form'] = frm
args['activeuser'] = request.user
return render_to_response('tools/tool_register.html', args)
에 의해 이루어집니다이 양식
class ToolForm(forms.ModelForm):
tool_type = forms.CharField(max_length=40, label="Tool Type: ")
description = forms.CharField(max_length=100, label="Description: ")
available = forms.BooleanField(required = False)
owner = forms.ModelChoiceField(queryset = BaseUser.objects.all(),
widget=forms.HiddenInput())
class Meta:
model = Tool
으로 업데이트되고 문제가 곳이다. 이보기로 도구를 업데이트하고 있습니다.
@login_required
def tool_edit(request, tool_id):
curr_tool = Tool.objects.get(pk = tool_id)
if request.method == 'POST':
frm = ToolForm(request.POST, instance = curr_tool)
if frm.is_valid():
frm.save(force_update = True)
return render_to_response('tools/tool_edit_success.html')
else:
frm = ToolForm(instance = curr_tool)
args = {}
args.update(csrf(request))
args['form'] = frm
return render_to_response('tools/tool_edit.html', args)
그러나이
는 기존를 업데이트하는 대신 업데이트 된 정보와 주어진 도구의 새로운 인스턴스를 생성합니다. 평소에는
instance = x
을 사용하고 있습니다. 이 도구는 하나의
BaseUser
과 관련이 있습니다. 중요하다면 여기에 코드도 있습니다.
class BaseUser(AbstractUser):
zipcode = models.IntegerField(('Zipcode'), max_length=5, blank=True)
address = models.CharField(('Address'), max_length=40, blank=True)
shown_username = 'username'
class Meta:
verbose_name = 'Base User'
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['first_name',
'last_name',
'email',
'zipcode',
'address',
]
약간 길어. 내가 읽은 모든 것은 이것이 업데이트되고 생성되지 않아야한다고 말했습니다.
이전 인스턴스를 업데이트하는 대신 새 인스턴스를 만드는 이유는 무엇입니까? 이전 인스턴스를 업데이트하도록 코드를 수정하려면 어떻게해야합니까?
AFAIK는'force_updaet = TRUE '는 Model.save()'적용'방법은 잘 모르겠어요 경우'ModelForm.save() '메소드는 해당 키워드를 인식합니다. 나는이 페이지를 체크했다.'force_update'에 대한 언급은 없다. https://docs.djangoproject.com/en/dev/topics/forms/modelforms – Raiyan
올바른 방법으로 게시하고 싶습니까? 템플릿을 보여줄 수 있습니까? –