假设我有以下模型(保持简单):
CXX=$(BASE_DIR)/MPICH/bin/mpicxx
CXXLD=$(BASE_DIR)/MPICH/bin/mpicxx -static
BOOST_INCLUDE_DIR=$(BASE_DIR)/Boost/Boost_1.54/include
BOOST_LIB_DIR=$(BASE_DIR)/Boost/Boost_1.54/lib
BOOST_INFIX=-mt-s
NETCDF_INCLUDE_DIR=$(BASE_DIR)/NetCDF/include
NETCDF_LIB_DIR=$(BASE_DIR)/NetCDF/lib
CURL_INCLUDE_DIR=$(BASE_DIR)/CURL/include
CURL_LIB_DIR=$(BASE_DIR)/CURL/lib
# DIRECTORIES
SRC_DIR=../src
REPAST_HPC_DIR=../src/repast_hpc
RELOGO_DIR=../src/relogo
RUMOR_DIR=../src/rumor_model
ZOMBIE_DIR=../src/zombies
# DERIVED VARIABLES (Do not modify)
I_REPAST=-I$(REPAST_HPC_DIR)
I_BOOST=-I$(BOOST_INCLUDE_DIR)
L_BOOST=-L$(BOOST_LIB_DIR)
l_BOOST=-lboost_mpi$(BOOST_INFIX) -lboost_serialization$(BOOST_INFIX) -lboost_system$(BOOST_INFIX) -lboost_filesystem$(BOOST_INFIX)
I_NETCDF=-I$(NETCDF_INCLUDE_DIR)
L_NETCDF=-L$(NETCDF_LIB_DIR)
l_NETCDF=-lnetcdf_c++ -lnetcdf
I_CURL=-I$(CURL_INCLUDE_DIR)
L_CURL=-L$(CURL_LIB_DIR)
l_CURL=-lcurl
# SOURCE FILES
# Repast HPC
REPAST_HPC_SOURCES=$(addprefix $(REPAST_HPC_DIR)/, \
AgentId.cpp AgentImporterExporter.cpp AgentRequest.cpp AgentStatus.cpp \
Graph.cpp GridComponents.cpp GridDimensions.cpp NCDataSet.cpp \
NCDataSetBuilder.cpp NetworkBuilder.cpp Properties.cpp Random.cpp \
RepastErrors.cpp RepastProcess.cpp SRManager.cpp SVDataSet.cpp \
SVDataSet.cpp SVDataSetBuilder.cpp Schedule.cpp SharedContext.cpp \
SharedBaseGrid.cpp SharedNetwork.cpp Utilities.cpp ValueLayer.cpp \
Variable.cpp initialize_random.cpp io.cpp logger.cpp \
spatial_math.cpp )
# ReLogo
RELOGO_SOURCES=$(addprefix $(RELOGO_DIR)/, \
AbstractRelogoAgent.cpp AgentSet.cpp Observer.cpp Patch.cpp \
RandomMove.cpp RelogoAgent.cpp RelogoContinuousSpaceAdder.cpp RelogoDiscreteSpaceAdder.cpp \
RelogoLink.cpp Turtle.cpp WorldCreator.cpp WorldDefinition.cpp \
creators.cpp utility.cpp )
# Rumor Model
RUMOR_SOURCES=$(addprefix $(RUMOR_DIR)/, \
RumorModel.cpp main.cpp)
# Zombie Model
ZOMBIE_SOURCES=$(addprefix $(ZOMBIE_DIR)/, \
Human.cpp InfectionSum.cpp Zombie.cpp ZombieObserver.cpp \
main.cpp)
# OBJECT FILES
REPAST_HPC_OBJECTS=$(patsubst %.cpp,%.o,$(REPAST_HPC_SOURCES))
RELOGO_OBJECTS=$(patsubst %.cpp,%.o,$(RELOGO_SOURCES))
RUMOR_OBJECTS=$(patsubst %.cpp,%.o,$(RUMOR_SOURCES))
ZOMBIE_OBJECTS=$(patsubst %.cpp,%.o,$(ZOMBIE_SOURCES))
# TARGETS
REPAST_VERSION=2.0
REPAST_HPC_NAME=repast_hpc-$(REPAST_VERSION)
REPAST_HPC_LIB=../lib/lib$(REPAST_HPC_NAME).a
RELOGO_NAME=relogo-$(REPAST_VERSION)
RELOGO_LIB=../lib/lib$(RELOGO_NAME).a
RUMOR_EXE=../bin/rumor_model
ZOMBIE_EXE=../bin/zombie_model
l_REPAST_HPC=-l$(REPAST_HPC_NAME)
l_RELOGO=-l$(RELOGO_NAME)
# Default rule makes everything
.PHONY : all
all: copy_includes repast_hpc relogo rumor_model zombie_model
.PHONY : copy_includes
copy_includes:
mkdir -p ../include/repast_hpc
mkdir -p ../include/relogo
cp $(REPAST_HPC_DIR)/*.h ../include/repast_hpc/
cp $(RELOGO_DIR)/*.h ../include/relogo/
$(REPAST_HPC_LIB): $(REPAST_HPC_OBJECTS)
mkdir -p ../lib
rm -f $(REPAST_HPC_LIB)
ar rc $(REPAST_HPC_LIB) $(REPAST_HPC_OBJECTS)
ranlib $(REPAST_HPC_LIB)
$(RELOGO_LIB): $(RELOGO_OBJECTS)
mkdir -p ../lib
rm -f $(RELOGO_LIB)
ar rc $(RELOGO_LIB) $(RELOGO_OBJECTS)
ranlib $(RELOGO_LIB)
$(RUMOR_EXE): $(REPAST_HPC_LIB) $(RUMOR_OBJECTS)
mkdir -p ../bin
cp $(RUMOR_DIR)/config.props ../bin/rumor_config.props
cp $(RUMOR_DIR)/model.props ../bin/rumor_model.props
$(CXXLD) -L../lib/ $(L_BOOST) $(L_NETCDF) $(RUMOR_OBJECTS) $(l_NETCDF) $(l_REPAST_HPC) $(l_BOOST) -o $(RUMOR_EXE)
$(ZOMBIE_EXE): $(REPAST_HPC_LIB) $(RELOGO_LIB) $(ZOMBIE_OBJECTS)
mkdir -p ../bin
cp $(ZOMBIE_DIR)/config.props ../bin/zombie_config.props
cp $(ZOMBIE_DIR)/model.props ../bin/zombie_model.props
$(CXXLD) -L../lib/ $(L_BOOST) $(L_NETCDF) $(L_CURL) $(ZOMBIE_OBJECTS) $(l_NETCDF) $(l_CURL) $(l_RELOGO) $(l_REPAST_HPC) $(l_BOOST) -o $(ZOMBIE_EXE)
# User-friendly names
.PHONY : repast_hpc
repast_hpc: $(REPAST_HPC_LIB)
.PHONY : relogo
relogo: $(RELOGO_LIB)
.PHONY : rumor_model
rumor_model: $(RUMOR_EXE)
.PHONY : zombie_model
zombie_model: $(ZOMBIE_EXE)
# Cleanup
.PHONY : repast_hpc_clean
repast_hpc_clean:
rm -f $(REPAST_HPC_LIB)
rm -f $(REPAST_HPC_DIR)/*.o
.PHONY : relogo_clean
relogo_clean :
rm -f $(RELOGO_LIB)
rm -f $(RELOGO_DIR)/*.o
.PHONY : rumor_clean
rumor_clean :
rm -f $(RUMOR_EXE)
rm -f $(RUMOR_DIR)/*.o
.PHONY : zombie_clean
zombie_clean :
rm -f $(ZOMBIE_EXE)
rm -f $(ZOMBIE_DIR)/*.o
.PHONY : clean
clean: repast_hpc_clean relogo_clean rumor_clean zombie_clean
.PHONY : distclean
distclean: clean
rm -fr ../include
rm -fr ../lib
rm -fr ../bin
# Object files are built from cpp files
%.o:
$(CXX) -c $(I_BOOST) $(I_NETCDF) $(I_CURL) -I$(SRC_DIR) -o $@ $*.cpp
# Cancel implicit rule for name with no suffix, to avoid confusing output:
%: %.o
现在我想让每位法官在运动员身上得分:
models.py:
class Athlete(models.Model):
name = models.CharField()
class Judge(models.Model):
name = models.Charfield()
我的admin.py到目前为止:
class Score(models.Model):
athlete = models.ForeignKey(Athlete)
judge = models.ForeignKey(Judge)
score = models.SmallIntegerField()
Scores应该可以在Django-Admin-Backend中编辑。这是我的问题。 如何在我的数据库中获得每个'判断'的ScoreInlines?我不喜欢使用ChoiceFields,也不需要从Inlines添加更多评委。
换句话说:我如何获得独特的“Inlines”?有没有办法在查询集上限制它?
答案 0 :(得分:0)
您可以使用unique_together
选项确保每位裁判最多对运动员进行一次评分:
class Score(models.Model):
athlete = models.ForeignKey(Athlete)
judge = models.ForeignKey(Judge)
score = models.SmallIntegerField()
class Meta:
unique_together = (
('athlete', 'judge'),
)
然而,这无助于用户界面部分问题,即为Django管理员中的每个裁判创建内联。