次のフィールドを持つ Entry という名前のモデルがあります
from django.contrib.auth.models import User
class Entry(models.Model):
start = models.DateTimeField()
end = models.DateTimeField()
creator = models.ForeignKey(User)
canceled = models.BooleanField(default=False)
新しいエントリを作成するときに、作成者が同じ開始日と終了日の間にすでにイベントを作成している場合、作成されたくありません。だから私の考えは、ユーザーが作成フォームからデータを投稿するときでした
if request.method == 'POST':
entryform = EntryAddForm(request.POST)
if entryform.is_valid():
entry = entryform.save(commit=False)
entry.creator = request.user
#check if an entry exists between start and end
if Entry.objects.get(creator=entry.creator, start__gte=entry.start, end__lte=entry.end, canceled=False):
#Add to message framework that an entry allready exists there
return redirect_to('create_form_page')
else:
#go on with creating the entry
おそらく一意のフィールドとデータベースの整合性を適切にチェックする方がよいと考えていましたが、一意のフィールドの選択方法に悩まされているのはキャンセルされたフィールドです。私の方法に何か問題があると思いますか? ユーザーの開始日と終了日の間にエントリが設定されないようにすることを意味しますか? このコードは事前保存に行く方が良いと思いますか? データベースは空で開始されるため、1 つのエントリを入力した後、すべてがそのコースをたどります (それを前提としています...よくわかりません...)