일부 추가 속성을 추가하기 위해 장고 (v1.9) 내장 사용자 모델을 Player 클래스로 확장했습니다.Django 확장 사용자 모델 - 양식 채우기 오류
class Player(models.Model):
TIMEZONES=()
user = models.OneToOneField(User, on_delete=models.CASCADE)
... (player-specific properties here)
time_zone = models.CharField(max_length=255, choices=PRETTY_TIMEZONE_CHOICES, blank=True, null=True,)
장고 관리자 패널에서 사용자를 만들 때 항상 플레이어를 만들 필요는 없으므로 사용자 만 생성됩니다. 따라서 플레이어 ID와 사용자 ID가 정확히 일치하지 않습니다. 이와 같은, 플레이어에 연결되어 모델의 ModelForms을 채울 때이 문제로 연결 밝혀 : 새로운 도시를 만들 때
class City(models.Model):
player = models.ForeignKey(Player, on_delete=models.CASCADE)
name = models.CharField(max_length = 100)
x_coord = models.SmallIntegerField()
y_coord = models.SmallIntegerField()
region = models.CharField(max_length = 100)
def __unicode__(self):
return str(self.player) + "-" + str(self.name)
class Meta:
db_table = 'cities'
class CityForm(ModelForm):
class Meta:
model = City
fields = (
'name',
'player',
'x_coord',
'y_coord',
'region')
이 modelForm 사용됩니다. 사용자 ID와 플레이어 ID가 일치하면 문제가 없으며 플레이어 ID가 양식에 채워지고 도시가 성공적으로 만들어집니다. 사용자 ID와 플레이어 ID가 다른 경우 플레이어 ID가 양식에 채워지지 않고 양식의 유효성을 검사하지 못하고 도시 만들기가 실패합니다.
Player ID를 request.user에서 가져 오는 데 아무런 문제가 없으며 POST 데이터를 가져온 후 유효성을 검사하기 전에 플레이어 ID를 수정할 수 있습니다. 또한 Player가 항상 만들어 지도록 사후 저장 후크를 추가 했으므로 ID는 항상 일치합니다. 하지만 사용자 데이터에 액세스 할 수 있고 일대일 관계이기 때문에 양식 은에 먼저 플레이어 ID가 채워져 있어야합니다.
무엇이 여기에 있습니까?
ID에 대한 어떤 가정도하지 않았습니다. 반대의 경우, 플레이어 ID가 modelForm에 올바르게 채워질 것이라고 당연시했습니다. 이 문제는 여러 개의 도시 ID가있는 것은 아닙니다. 사용자의 플레이어 ID가 도시 작성 양식에 채워지지 않는 새로운 도시를 만드는 경우입니다. – seadeer
아,이 문제를 해결하기 위해 노력하고 있었다는 것을 알았습니다. 대답을 업데이트 할 것입니다. –
그래, 제 대답이 바뀌 었으니 잘하면 도움이됩니다. 당신이 아직도 이해가 안되면 나는 그것을 정리하려고 노력할 수 있습니다. –