[英]ModelForm in Django with One-to-One relationship: unable to update
我正在使用Django的ModelForm功能創建表單。 但是,我的特定模型通過使用一對一關系的另一個模型進行了擴展。 因此,我創建了兩個單獨的表單,然后由用戶填寫並提交。 在創建記錄( 創建場所和餐廳記錄)時,所有這些都可以100%起作用,但是在更新記錄時則無效。 當我嘗試更新表單時,它沒有通過餐廳表單的is_valid檢查。
我是Django新手,還必須說這段代碼中似乎有很多重復之處。 有沒有更好的方法來以更少的重復次數更新/插入記錄?
我的模特:
class Place(models.Model):
name = models.CharField(max_length=255)
class PlaceForm(ModelForm):
class Meta:
model = Place
fields = ['name']
class Restaurant(models.Model):
place = models.OneToOneField(
Place,
on_delete=models.CASCADE,
related_name='restaurant',
primary_key=True,
)
location = models.CharField(max_length=255, null=True, blank=True)
class RestaurantForm(ModelForm):
class Meta:
model = Restaurant
exclude = ['place']
這是我的看法:
def create_or_edit(request, id=False):
restaurantform = False
if id:
info = get_object_or_404(Place, pk=id)
form = PlaceForm(instance=info)
if hasattr(info, 'restaurant'):
restaurantform = RestaurantForm(instance=info.restaurant)
else:
info = False
form = PlaceForm()
if type == 'restaurant':
restaurantform = RestaurantForm()
if request.method == 'POST':
if not id:
form = PlaceForm(request.POST)
if type == 'restaurant':
restaurantform = RestaurantForm(request.POST)
else:
form = PlaceForm(request.POST, instance=info)
if type == 'restaurant':
restaurantform = RestaurantForm(request.POST, instance=info.restaurant)
if form.is_valid() and restaurantform.is_valid():
info = form.save(commit=False)
info.site = request.site
info.save()
if type == 'restaurant':
if id:
restaurantform.save()
else:
restaurant = restaurantform.save(commit=False)
restaurant.place = info
restaurant.save()
messages.success(request, 'Information was saved.')
return redirect(reverse('app:record', args=[info.id]))
else:
messages.warning(request, 'Problem saving record')
在您看來,您僅接受創建的發布請求“ request.method =='POST'”。 要更新,請寫
如果request.method =='UPDATE'或'PUT'
在這里寫代碼
.........
.........
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.