Tôi có hai mô hình:Lưu mới chính nước ngoài với hình thức django
class Studio(models.Model):
name = models.CharField("Studio", max_length=30, unique=True)
class Film(models.Model):
studio = models.ForeignKey(Studio, verbose_name="Studio")
name = models.CharField("Film Name", max_length=30, unique=True)
Tôi có một hình thức phim cho phép người sử dụng để thể chọn một Studio từ trước, hoặc gõ vào một cái mới:
class FilmForm(forms.Form):
studio = forms.ModelChoiceField(Studio.objects, required=False)
new_studio = forms.CharField(max_length=30, required=False, label = "New Studio Name")
name = forms.CharField(max_length=30, label = "Film Name")
Có xác thực để đảm bảo rằng tên new_studio chưa tồn tại. Nếu người dùng nhập new_studio, tôi muốn lưu studio và sau đó lưu Phim mới.
form = FilmForm(request.POST)
if form.is_valid(): # All validation rules pass
std = Studio(name = form.cleaned_data['new_studio'])
std.save()
Nhưng sau đó làm cách nào để lưu chủ thể Phim đối tượng id studio mới? Tôi đã thấy this question, nhưng nếu tôi có nhiều trường khác trong mô hình Phim và Biểu mẫu Phim thì sao? Nếu tôi sử dụng câu trả lời được liên kết, tôi sẽ phải nhập mỗi trường:
studio = Studio.objects.get(name=request.POST['new_studio'])
newFilm=Film(name=form.name, studio=studio, field_one = form.field_one, field_two = form.field_two, etc.)
Cách chính xác để thực hiện điều này là gì?
oh, hmm. Tốt đẹp! Tôi nghĩ tôi phải đi một chặng đường dài để bù đắp cho khả năng thêm một studio mới. Cảm ơn! –
Tôi đang gặp một vấn đề.Tôi đã tạo kiểm tra xác thực cho một studio trùng lặp (nếu người dùng nhập new_studio đã tồn tại). Các mã chính xác đạt đến ValidationError, nhưng dường như vẫn tiếp tục làm sạch anyway và cho tôi lỗi: Không thể gán None: "Film.studio" không cho phép giá trị null. –
Phương pháp 'sạch' sẽ giải quyết mọi vấn đề đó. Nếu 'new_studio' tồn tại, nó sẽ chỉ đơn giản là lấy studio hiện có thay vì tạo một cái mới (' get_or_create'), vì vậy việc kiểm tra xác nhận bạn có là không cần thiết. Trường hợp duy nhất không được bảo vệ bởi phương thức 'clean' ở trên là nếu' studio' được nhập nhưng 'new_studio' thì không. Tuy nhiên, đó sẽ không phải là một lỗi và không có gì đặc biệt cần phải được thực hiện trong kịch bản đó. Tôi tưởng tượng bất cứ điều gì kiểm tra xác nhận bạn đang làm là rối tung với các giá trị bằng cách nào đó. –