在Django中是否可以通过外键获得最大数量的关系?
例如,我希望一个用户发表的帖子不超过10个。我初始化模型
class Post(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE)
我应该在哪里添加此检查?还是不可能,我应该考虑一下?
答案 0 :(得分:1)
这就是我要怎么做。
每个模型都有一个save()选项,当保存模型时会调用该选项。如果用户已经有10个帖子,则可以在此处检查并引发错误。
package com.example.petmx;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.content.Intent;
import android.os.Bundle;
import android.text.InputType;
import android.view.MenuItem;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TimePicker;
import com.google.android.material.navigation.NavigationView;
import com.google.firebase.auth.FirebaseAuth;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class mainNavigation extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
MenuItem menuItem;
DrawerLayout drawerLayout;
ActionBarDrawerToggle actionBarDrawerToggle;
Toolbar toolbar;
NavigationView navigationView;
FragmentManager fragmentManager;
FragmentTransaction fragmentTransaction;
EditText date_time_in;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_navigation);
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
drawerLayout = findViewById(R.id.drawer);
navigationView = findViewById(R.id.navigationView);
navigationView.setNavigationItemSelectedListener(this);
actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.open,R.string.close);
drawerLayout.addDrawerListener(actionBarDrawerToggle);
actionBarDrawerToggle.setDrawerIndicatorEnabled(true);
actionBarDrawerToggle.syncState();
//to change
fragmentManager = getSupportFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.container_fragment, new NavigationFragment());
fragmentTransaction.commit();
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
if (menuItem.getItemId() == R.id.date_time_input){
startActivity(new Intent(getApplicationContext(),DateTimeDialog.class));
finish();
}
if (menuItem.getItemId() == R.id.home){
//to change
drawerLayout.closeDrawer(GravityCompat.START);
fragmentManager = getSupportFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container_fragment, new NavigationFragment());
fragmentTransaction.commit();
}
if (menuItem.getItemId() == R.id.settings){
drawerLayout.closeDrawer(GravityCompat.START);
fragmentManager = getSupportFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container_fragment, new Navigation2Fragment());
fragmentTransaction.commit();
}
if (menuItem.getItemId() == R.id.logout){
drawerLayout.closeDrawer(GravityCompat.START);
//FirebaseAuth.getInstance().signOut();
startActivity(new Intent(getApplicationContext(),Login.class));
finish();
}
return true;
}
}