2015-10-10 2 views
0

Я представляю форму внутри моего шаблона, где «пациент-пользователь» отправляет встречу. У меня есть эта неудобная иерархия модели, которую я пытаюсь решить.Django auto присваивает значение внешнему ключу в форме?

У меня есть назначениеRequest, которое принимает внешний ключ пациента, в котором пациент состоит из номера официального утверждения и внешнего ключа пользовательского объекта, который встроен в django.

Я по существу (по форме отправлю на прием), чтобы автоматически заполнить данные внешнего ключа пациента. Это возможно?

Models.py

#This patient model will extend the user class so we can add the associated medical data for the user 
class Patient(models.Model): 
    phone_number = PhoneNumberField(blank = True) 
    email_address = models.EmailField(blank = True, max_length=254) 
    user = models.OneToOneField(User, unique=True, blank=True, default="", null=True) 
    approved = models.IntegerField(default=0, null=False) 



#Class for the patients to schedule appointments for their associated doctor 
class PatientAppt(models.Model): 
    date = models.DateTimeField(auto_now=False, auto_now_add=False, unique=True) 
    doctor = models.ForeignKey(Doctor, unique=False, blank=True, default="") 
    pain_level = models.IntegerField(validators=[MinValueValidator(0), 
             MaxValueValidator(10)], default=0) 
    medical_conditions = models.CharField(max_length=1000, default="None") 
    allergies = models.CharField(max_length=1000, default="None") 
    user = models.ForeignKey(Patient, unique=False, blank=True, default="") 
+0

Просьба показать, что вы написали для своего просмотра. – Alasdair

+0

Вы можете использовать 'initial_data' kwarg при создании экземпляра формы. Или вы также можете отобразить идентификатор внешнего ключа на стороне HTML, переданный через контекст. Есть так много способов! – Babu

ответ

0

Если вы используете Джанго формы (которые вы должны быть), я считаю, что лучший способ, чтобы переопределить метод сохранения и передать объект пациента. Передача идентификатора через форму через скрытое поле означает, что вам нужно будет проверять его на стороне сервера, в то время как если вы передадите идентификатор из сеанса, вы знаете, что это безопасно.

# Your View 
def post(self, request): 
    ... 
    if context['form'].is_valid(): 
     context['form'].save(patient=request.user.patient) 

# Your form 
def save(self, commit=True, patient=patient): 
    self.instance.user = patient 
    return super(PatientApptForm, self).save(commit=commit) 
Смежные вопросы