2016-09-02 3 views
0

양식을 입력하면 텍스트 상자에 값을 입력하는 대신 양식을 사용하는 데 문제가 있습니다. ToolID, 도구의 수량 및 체크섬을 요구하는 도구 체크 아웃 트랜잭션을 만들려고합니다. 사용자가 PartyID를 선택하는 대신 사용자 이름과 성의 목록을 볼 수있게하고 싶습니다. 성 및 이름은 필수 항목이지만 해당 입력란을 포함하는 양식을 만들 때 입력란에 입력란이 표시됩니다. 나는 사용자가 드롭 다운 옵션에서 원하는 사용자를 선택하게 할 것이라고 믿는다. 어떤 도움을 주시면 감사하겠습니다.외래 키가있는 장고 양식

모델 :

class Party(models.Model): 
PartyID=models.AutoField(primary_key=True, db_column='PartyID') 
FirstName=models.CharField(max_length=100, null=False) 
LastName=models.CharField(max_length=100, null=False) 
PhoneNumber=models.CharField(max_length=25, null=False) 
Organization=models.CharField(max_length=100, null=True) 
Deleted=models.BooleanField(default=0) 

objects=models.Manager() 

class Meta: 
    managed=True 
    db_table='Party' 

def __unicode__(self): 
    return str(self.PartyID) 

def get_absolute_url(self): 
    return reverse("ToolSearch:borrowerUpdate", kwargs={"pk": self.PartyID}) 

class ToolTransaction(models.Model): 
CheckOutID=models.AutoField(primary_key=True) 
ToolID=models.ForeignKey(Tool, db_column='ToolID', on_delete=models.CASCADE,) 
PartyID=models.ForeignKey(Party, db_column='PartyID', on_delete=models.CASCADE,) 
Quantity=models.IntegerField(null=False) 
CheckOutDate=models.DateField(null=False, default=datetime.datetime.now) 
CheckInDate=models.DateField(null=True) 
Deleted=models.BooleanField(default=0) 
objects=ActiveTransactionManager() 
#objects=models.Manager() 

class Meta: 
    managed=True 
    db_table='ToolTransaction' 
    ordering=('CheckOutID',) 

def __unicode__(self): 
    return str(self.CheckOutID) 

def get_absolute_url(self): 
    return reverse("ToolSearch:toolCheckin", kwargs={"pk": self.CheckOutID}) 

class Tool(models.Model): 
ToolID=models.CharField(max_length=100, primary_key = True, unique=True, db_column='ToolID') 
Quantity=models.IntegerField(null=False) 
Location=models.CharField(max_length=100, null=False) 
CategoryID=models.IntegerField(null=True) 
Deleted=models.BooleanField(default=0) 

objects=models.Manager() 

class Meta: 
     managed=True 
     db_table='Tool' 

def __unicode__(self): 
    return self.ToolID 

def get_absolute_url(self): 
    return reverse("ToolSearch:toolSearchResults", kwargs={"pk": self.ToolID}) 

양식 :

class BorrowerSelectForm(forms.ModelForm): 
class Meta: 
    model = Party 
    fields = [ 
     "FirstName", 
     "LastName", 
     "PhoneNumber" 
    ] 

class ToolCheckoutCreateForm(forms.ModelForm): 
class Meta: 
    model = ToolTransaction 
    fields = [ 
     "ToolID", 
     "Quantity", 
     "PartyID", 
    ] 

보기 : 나는 ToolCheckOutCreateForm도에서 개체를 참조 할 수 있습니다 경우

def tool_checkout(request): 
    queryset = Party.objects.all() 
    form = ToolCheckoutCreateForm(request.POST or None) 
    form2 = BorrowerSelectForm(request.POST or None) 
    if form.is_valid(): 
     instance=form.save(commit=False) 
     instance.save() 
     messages.success(request, "Tool Checked Out succesfully") 
    context={ 
     "form": form, 
     "form2": form2 
    } 
    return render(request, "toolcheckout.html", context) 

나는 또한 하나의 양식을 사용하여에 괜찮을 것 한 번에 두 가지 형식을 표시하는 것과 대조적 인 당사자 모델. 이 문제를 해결하는 가장 좋은 방법은 확실하지 않습니다.

감사합니다.

답변

0

내 접근 방식을 변경하여이 문제를 해결했습니다. 내 모델을 사용하는 방식이 올바르지 않습니다. 데이터베이스 테이블마다 하나의 모델을 만들고있었습니다. 그러나, 내가해야 할 일은 수행 할 작업마다 하나의 모델을 만드는 것이 었습니다. 예를 들어, CheckIn과 CheckOut은 모두 ToolTransaction 모델을 사용합니다. CheckIn Model (위의 ToolTransaction 모델과 동일 함)과 CheckOut 모델을 사용하여 올바른 URL/뷰에 역방향 조회를 추가하여 작업을 완료 할 수있었습니다. 또한 나는 내 데이터를 내부에 배치 한 HTML 내장 폼을 결합하여 뷰의 쿼리 세트에서 검색 한 데이터에서 편집 불가능 상태로 만들었습니다. 그런 다음 ToolCheckoutCreateForm 양식을 계속 사용했습니다. 내 html 양식에서 내 차용자 정보를 보유했습니다.